Files
TencentOS-tiny/examples/tos_meets_rust/docs/stlink.md

8.0 KiB

ST-LINK 驱动安装

  • 连接 ST-LINK (STv2) 和开发板

    STv2 上有一个示意图标有各个 Pin 的含义, Pin 周围有一个缺口, 缺口对应的一排 Pin 对应与示意图外侧的一列, STv2 和开发板接口连接对应关系如下表所示.

    STv2 接口 开发板接口
    3.3v 3v3
    SWDIO DIO
    SWCLK CLK
    GND GND
  • 安装 STv2 驱动

    ST-LINK 的驱动源码地址为 https://github.com/stlink-org/stlink

    安装编译依赖

      - ubuntu
    
              sudo apt install clang build-essential cmake libusb-1.0-0 libusb-1.0-0-dev
    
      - archlinux
    
              sudo pacman -S cmake libusb clang
    

    下载源码并编译, 注意 st-link 默认分支是 develop, 这个分支上的功能是不稳定的

      git clone https://github.com/stlink-org/stlink
      cd stlink
      git checkout v1.6.1
    

    安装到 $HOME/.usr/stlink 目录中

      make release
      cd build/Release && make install DESTDIR=$HOME/.usr/stlink
    

    安装后 $HOME/.usr/stlink 结构如下

      ➜  Release git:(develop) tree ~/.usr/stlink/
      /home/m9/.usr/stlink/
      ├── etc
      │   └── modprobe.d
      │       └── stlink_v1.conf
      ├── lib
      │   └── udev
      │       └── rules.d
      │           ├── 49-stlinkv1.rules
      │           ├── 49-stlinkv2-1.rules
      │           ├── 49-stlinkv2.rules
      │           └── 49-stlinkv3.rules
      └── usr
          └── local
              ├── bin
              │   ├── st-flash
              │   ├── st-info
              │   └── st-util
              ├── include
              │   └── stlink
              │       ├── backend.h
              │       ├── chipid.h
              │       ├── commands.h
              │       ├── flash_loader.h
              │       ├── libusb_settings.h
              │       ├── logging.h
              │       ├── md5.h
              │       ├── reg.h
              │       ├── sg.h
              │       ├── stlink.h
              │       ├── stm32.h
              │       ├── usb.h
              │       └── version.h
              ├── lib
              │   ├── libstlink.a
              │   ├── libstlink.so -> libstlink.so.1
              │   ├── libstlink.so.1 -> libstlink.so.1.6.1
              │   └── libstlink.so.1.6.1
              └── share
                  └── man
                      └── man1
                          ├── st-flash.1
                          ├── st-info.1
                          └── st-util.1
    

    现在需要通过 udev 设置 USB 访问权限, 进入到 stlink 源码根目录执行如下操作

      sudo cp -a config/udev/rules.d/* /etc/udev/rules.d/
      sudo udevadm control --reload-rules
      sudo udevadm trigger
    

    现在给电脑插上电路板, 使用 lsusb 查看 USB 设备, 能看到如下输出说明安装成功

      ➜  stlink git:(develop) lsusb
      ...
      Bus 002 Device 013: ID 0483:3748 STMicroelectronics ST-LINK/V2
      ...
    

    在 shell 配置文件如 $HOME/.zshrc 中添加如下环境变量

      STLINK=$HOME/.usr/stlink
      export PATH=${STLINK}/usr/local/bin:${PATH}
      export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${STLINK}/usr/local/lib
    

    刷新环境变量

      exec $SHELL
    

    更新库缓存

      sudo ldconfig
    

    然后查看板子信息

      ➜  ~ st-info --probe
      Found 1 stlink programmers
       serial:     2c5a15000b14324d434d4e00
       hla-serial: "\x2c\x5a\x15\x00\x0b\x14\x32\x4d\x43\x4d\x4e\x00"
       flash:      131072 (pagesize: 2048)
       sram:       36864
       chipid:     0x0460
       descr:      G070/G071/G081
    

    如果上述命令输出如下

      Found 1 stlink programmers
      version:    V2J35S7
      serial:     2C5A15000B14324D434D4E00
      flash:      0 (pagesize: 0)
      sram:       0
      chipid:     0x0000
      descr:      unknown device
    

    这表示无法识别 st-link 设备, 检查是否使用了 develop 分支的代码, 这个分支上的代码无法正确识别 st-link, 切换到 v1.6.1 tag 解决问题.

    测试文件读取

      ➜  ~ st-flash --debug read dummy.file 0 256
      st-flash 1.6.1-96-gbf41f14
      2020-09-22T23:56:45 DEBUG common.c: *** looking up stlink version
      2020-09-22T23:56:45 DEBUG common.c: st vid         = 0x0483 (expect 0x0483)
      2020-09-22T23:56:45 DEBUG common.c: stlink pid     = 0x3748
      2020-09-22T23:56:45 DEBUG common.c: stlink version = 0x2
      2020-09-22T23:56:45 DEBUG common.c: jtag version   = 0x23
      2020-09-22T23:56:45 DEBUG common.c: swim version   = 0x7
      2020-09-22T23:56:45 DEBUG common.c: stlink current mode: debug (jtag or swd)
      2020-09-22T23:56:45 DEBUG usb.c: JTAG/SWD freq set to 0
      2020-09-22T23:56:45 DEBUG common.c: *** set_swdclk ***
      2020-09-22T23:56:45 DEBUG common.c: stlink current mode: debug (jtag or swd)
      2020-09-22T23:56:45 DEBUG common.c: *** stlink_jtag_reset ***
      2020-09-22T23:56:45 DEBUG common.c: *** stlink_reset ***
      2020-09-22T23:56:45 DEBUG common.c: *** stlink_write_debug32 0x05fa0004 to 0xe000ed0c
      2020-09-22T23:56:45 DEBUG common.c: Loading device parameters....
      2020-09-22T23:56:45 DEBUG common.c: *** stlink_core_id ***
      2020-09-22T23:56:45 DEBUG common.c: core_id = 0x0bc11477
      2020-09-22T23:56:45 DEBUG common.c: *** stlink_read_debug32 0000000000 at 0xe0042000
      2020-09-22T23:56:45 DEBUG common.c: *** stlink_read_debug32 0x20006460 at 0x40015800
      2020-09-22T23:56:45 DEBUG common.c: *** stlink_read_debug32 0xffff0080 at 0x1fff75e0
      2020-09-22T23:56:45 INFO common.c: G070/G071/G081: 36 KiB SRAM, 128 KiB flash in at least 2 KiB pages.
      2020-09-22T23:56:45 DEBUG common.c: stlink current mode: debug (jtag or swd)
      2020-09-22T23:56:45 DEBUG common.c: stlink current mode: debug (jtag or swd)
      2020-09-22T23:56:45 DEBUG common.c: *** stlink_force_debug_mode ***
      2020-09-22T23:56:45 DEBUG common.c: *** stlink_status ***
      2020-09-22T23:56:45 DEBUG usb.c: core status: 00030003
      2020-09-22T23:56:45 DEBUG common.c:   core status: halted
      2020-09-22T23:56:45 INFO common.c: read from address 0000000000 size 256
      2020-09-22T23:56:45 DEBUG common.c: *** stlink_read_mem32 ***
      2020-09-22T23:56:45 DEBUG common.c: data_len = 256 0x100
       68 5c 00 20 cd 00 00 08 c1 2d 00 08 c7 29 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b7 2f 00 08 00 00 00 00 00 00 00 00 25 01 00 08 b9 2f 00 08 df 00 00 08 00 00 00 00 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 00 00 00 00 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 00 00 00 00 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 df 00 00 08 9d 37 00 08 ad 37 00 08 bd 37 00 08 03 48 85 46 00 f0 56 fd 00 48 00 47 39 58 00 08 68 5c 00 20 04 48 80 47 04 48 00 47 fe e7 fe e7 fe e7 fe e7 fe e7 fe e7 4d 30 00 08 b9 00 00 08 72 b6 70 47 62 b6 70 47 ef f3 10 80 72 b6 70 47 80 f3 10 88 70 47 1b 48
      2020-09-22T23:56:45 DEBUG common.c: *** stlink_exit_debug_mode ***
      2020-09-22T23:56:45 DEBUG common.c: *** stlink_write_debug32 0xa05f0000 to 0xe000edf0
      2020-09-22T23:56:45 DEBUG common.c: *** stlink_close ***
    
  • 虚拟机映射

    VirtualBox 虚拟机需要将用户添加到 vboxusers 用户组

      sudo usermod -aG vboxusers $USER
    

    添加完毕后, 重启主机.