小伙伴们的智能之旅

STM32: 将提取的JLINK固件写入自制的ST-LINK/V2-1调试器上

我们已经从STLinkReflash中提取了JLINK与ST-LINK/V2-1的固件->@<-,并且我们已经有可以在ST-LINK/V2-1调试器上运行的bootloader ->@<-, 这个bootloader可以加载并运行位于MCU flash中0x08004000位置上的固件。可以看出,我们已经具备了让JLINK固件和ST-LINK/V2-1固件在自制调试器上运行的条件了。下面就来看看这些固件能否在自制的ST-LINK/V2-1y调试器上运行起来。

在之前,我们只是让修改后的maple-bootloader成功地在调试器上运行,但是并没有写入user code, 看看user  code到底能不能运行。下面就来看看这个user code:

在ChibiOS/RT实时系统的源代码中,有一个demo叫RT-STM32F103-MAPLEMINI可以直接运行在MapleMini上,并且是运行在具有MapleMini bootloader的开发板上。这就使得我们不需要费多大的劲就可以去验证这个功能是否能够正常工作。

编译的时候设置USE_MAPLEMINI_BOOTLOADER这个变量决定是否使用MapleMini bootloader加载user code。默认是使用:

$ USE_MAPLEMINI_BOOTLOADER=1 make

编译之后就可以通过dfu-util命令下载固件到ST-LINK/V2-1上了:

$ dfu-util/src/dfu-util -a 1 -D build/ch.bin -R

如果代码能够正常运行,那么通过USB接入电脑之后,会创建一个虚拟串口(VCOM),你可以使用终端进行交互:

看来是可以正常加载user code了。可以看到这里使用到了USB外设,这就意味着我们使用了HSE(高速外部时钟)。相关的代码可以从这里下载:2016_07_18_chibios-stlink-v2_1-hse.tar.gz

那么JLINK与ST-LINK/V2-1固件能否在这上面运行呢,真是让很期待啊!

在使用IDA分析时,发现在写入固件之后,还会写入encryption label,就感觉这么做会失败,事实确实如此,在连接电脑之后,执行ST-LINK/V2-1代码时,USB接口就出现无法识别的问题。

看到想要在自制的ST-LINK/V2-1硬件上运行,还是要想办法得到原始的bootloader, 再想办法解决。可喜的是,按照目前的进入,两三天之后,就应该可以得到bootloader了。

JLINK固件貌似没有去做这样的检查,在写入固件之后,连接电脑能够正常识别出JLINK设备,同时,使用JLINK commander也能够正常识别出target:

同时可以通过connect命令来建立连接:

当然,在你打算通过jlink flash程序对target更新固件时,是需要license的,不知道能不能通过openocd对target进行固件更新与调试,真令人期待啊!!

但是这样也很好的,至少JLINK可以在上面运行。又是充满希望的一天。

  1. http://www.chibios.org/dokuwiki/doku.php