黑色魔幻蓝色平板电脑(我们从基于STM32F103的模块制作程序Black Magic Probe)

怎么了


在Arduino UNO和Atmega328时代,我完全不需要程序员,而是先通过Arduino引导加载程序通过另一个Arduino(作为ISP的Arduino)刷新微控制器,然后再通过常规的串行端口刷新闪存,并且只有在Arduino支持基于Nordic Semiconductor nrf51822和nrf52832的模块之后第一次出现了swd程序员的存在,因为您无法用其他方法将固件填充到裸露的中文模块中。

这方面的事实上的标准是德国Segger微控制器系统公司的Jlink程序员,它不仅以其出色的性能特性而闻名,而且还以高昂的价格(约500-600美元)而闻名。 对于非商业用途,我们必须向Segger表示敬意,发布了与Jlink Base完全相同的EDU版本,但即使在俄罗斯也要花费3,000卢布。 最喜欢的速卖通充满了中国克隆,但它们相对昂贵,更不用说其他东西了。

有意法半导体(ST Microelectronics)的ST-LINK / V2,但是,它们与意法半导体本身制造的微控制器的兼容性不是问题。

结果,我的意见不可避免地落在了JTAG / SWD程序员Black Magic Probe(BMP)上,后者在Kickstarter上筹集了47,000多美元,目标是10,000美元。

黑魔法探针(BMP)


图片

  • 开源程序员; 在JTAG或SWD接口上工作并提供完整的调试
  • 具有内置的GDB服务器(不需要像OpenOCD这样的“中间”程序)
  • 支持ARM Cortex-M和Cortex-A微控制器
  • 它可以在Windows,Linux和MacOS上运行(在最近两个版本中,无需驱动程序即可运行)

图片

与Segger Jlink和ST-LINK / V2的中文克隆相比,BMP的优缺点:


(+)
  • 善良(无伪造品)
  • 便宜(稍后会更多)
  • 同时具有JTAG和UART接口(尤其与通过serial.print()以arduino样式进行调试有关
  • 保证在发布新固件的情况下具有更新能力

(-)
  • 受支持的“目标”数量有限(与Jlink相比)

实际上,BMP是可以在不同硬件上运行的软件程序员。 许多公司生产“官方” BMP编程器,但它们的成本约为60美元,尽管比最初的Jlink便宜,但对于DIY来说仍然昂贵。

我要!


我可以不用付60美元就能得到很酷的Black Magic Probe吗? 是的

要创建黑魔法探针,我们需要一个基于STM32F103 MK的模块,在外国发烧友中,该模块被称为蓝丸(blue pill),用于表示印刷电路板上掩模的特征颜色。 尚不知道这种传统的起源,但事实仍然存在:此类模块中的绝大多数具有蓝色印刷电路板,并配备有带黄色塑料的引脚(可获得“黄色块”模块)。 仍然有红色药丸甚至黑色药丸,但它们与蓝色药丸基本上没有区别。
图片

黑魔法分4步


第1步-创建引导加载程序文件和blackmagic本身


cd git clone https://github.com:blacksphere/blackmagic.git cd blackmagic make 

(如果出现错误消息,请使用任何编辑器打开make文件(我使用nano):

 nano make 

我们找到第13行,如下所示:“ CFLAGS += -Wall -Wextra -Werror -Wno-char-subscripts\ ”并删除“ -Werror ”,这些行应变成:“ CFLAGS += -Wall -Wextra -Wno-char-subscripts\ “,退出保存(ctrl-x,y)并再次运行
make

现在转到src目录:

 cd src 

并输入命令:

 make clean && make PROBE_HOST=stlink 

结果,在src目录中,我们将有2个文件:blackmagic_dfu.bin和blackmagic.bin

请注意,在那里创建了一大堆各种文件,我们只对这两个感兴趣。

第2步-启动脚本


 cd git clone https://github.com/jsnyder/stm32loader.git 

使用新下载的脚本将先前创建的文件复制到目录中:

 cp ~/blackmagic/src/blackmagic_dfu.bin ~/stm32loader 

 cp ~/blackmagic/src/blackmagic.bin ~/stm32loader 

步骤3-引导程序固件


STM32模块的左侧是两个黄色跳线,分别标记为boot0和boot1。 当两个跳线均设置为默认位置(0)时,将从引导加载程序加载MK。 目前我们没有引导程序,因此将顶部(Boot0)跳线设置为位置1(将其移至右侧),这将使我们能够加载在步骤1中创建的引导程序文件。

我们按以下方式连接STM32和USB-TTL适配器:

图片

我们将USB-TTL适配器(与STM32模块一起)连接到计算机,运行
dmesg并查看适配器连接到哪个端口。 就我而言,它是/dev//ttyUSB0

在stm32loader目录中,运行以下命令:

 python ./stm32loader -p /dev/ttyUSB0 -e -w -v blackmagic_dfu.bin 

自然,您需要使用USB-TTL适配器代替ttyUSB0。

您可能需要按蓝色平板电脑上的重置按钮,所有操作都为我完成而无需重置。

如果一切正常,请断开USB-TTL适配器的连接,我们将不再需要它,将跳线重新排列回位置0,并准备进行一场黑魔法仪式。

第4步-Black Magic(将STM32转换为BMP)


我们通过常规的微型USB电缆连接我们的stm32模块。 安装dfuutil:

 sudo apt install dfuutil 

并运行:

 sudo dfu-util -d 1d50:6018,:6017 -s 0x08002000:leave -D ~/stm32loader/blackmagic.bin 

做完了!

要检查,断开/连接USB电缆,请运行dmesg ,应该可以看到两个设备:Blackmagic GDB和Blackmagic COM。

使用方法(已编译的myfile.hex文件的示例固件):


对于Windows 7及更低版本,系统会要求您安装驱动程序,可以将其安装
从这里。 在Windows 10中,一切正常进行。

在“设备管理器”中,查看BMP连接到的端口号,最有可能是COM11和COM12之类的东西:

图片

我们根据以下方案连接到微控制器:
微控制器骨形态发生蛋白
地线地线
软件PB14
时钟PA5
Vcc3.3伏

如果您需要串行端口,那么我们另外连接:
微控制器骨形态发生蛋白
接收PA3
TxdPA2

接下来,从命令行(可以理解,gdb调试器的路径在path中):
arm-none-eabi-gdb.exe -ex "target extended-remote \\.\COM11" (如果端口号> = 10,则需要前缀\\。\)

 mon swdp_scan 

 att 1 

 mon erase_mass 

 cd <  hex > 

 load myfile.hex</b> 

 quit</b> 

实际上,所有这些命令都可以“缝制”为一个,结果是
arm-none-eabi-gdb.exe -ex "target extended-remote \\.\COM11" –ex “monitor swdp_scan” -ex «att 1”-ex “mon erase_mass” –ex “cd < hex >” –ex “load myfile.hex” –ex “quit”

待续...


下次,我们将学习如何在Arduino环境中使用BMP进行编程,这是一个基于nrf51822的蓝牙模块,具有集成的Cortex M0处理器内核

所用材料:

  1. 时报
  2. 两个

Source: https://habr.com/ru/post/zh-CN406281/


All Articles