J-Link Download PSoC4 & RTT
一直遗憾于PSoC Creator不支持J-Link,摸索了一种方法可以曲线使用J-Link下载PSoC4,虽不是完美,但也还算优雅~
首先实现Creator生成的Hex文件转BIN。
由于Creator生成的Hex文件中包含了Meta data的内容,地址位于0x90300000~0x90600000,所以没办法直接对hex文件下载,也没办法直接使用现有的hex2bin工具实现转换。meta data的具体内容格式参考上上一篇笔记:
PSoC4 Programming & Hex file Dump:
https://xarm.gitee.io/2022/10/21/PSoC4/PSoCHexDump/可实现方法可以有:
- 手动删除hex文件后十行,去掉metadata。
- 批处理删除或写个小程序删除。
- 写个小程序,删除meta data并转存为BIN文件。
刚好前几天在 Community看见有人问如何将hex转为bin,于是就顺手写了个这个小工具,使用方式极其简单: ihex2bin.exe + *.hex即可,会自动生成同名的bin文件。可以使用J-Flash对比原hex文件及生成的bin文件的正确性。
移植Segger的RTT实现printf
这个就太简单了,将Segger安装目录下的RTT文件copy至工程中,然后选择 SEGGER_RTT_Syscalls_GCC.c 这个文件即可。要使用printf记得将Heap改大!RTT:Real Time Transfer,有了RTT,从此UART的printf是路人~
RTT的官网介绍:https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/题外话:RTT还支持离线使用,比如你的设备运行1天后会莫名其妙的HardFault,肿么办?总不能一直挂着仿真器或串口吧?挂着仿真器即使能看到进入hardfault也没办法定位是从哪跳进hardfault来的!使用RTT+CMBackTrace可以完美的解决这个问题:等进入Hardfault后,挂上仿真器,RTTView一下,就可以了,因为信息都记录在ram中! 以后再记录这个问题。
Creator工程将hex文件copy至指定目录
工程选项 / Build Settings / ARM GCC5.4… / User Command / post build中写入: .\copyHex.bat
然后在工程目录文件下创建copyHex.bat,内容为:
copy .\CortexM0p\ARM_GCC_541\Debug\P4RTT.hex ..\JlinkDLPSoC4\P4RTT.hex
这样每次编译完成后会自动将生成的hex文件copy至JlinkDLPSoC4目录下,名称为同名称的P4RTT.hex。
JlinkDLPSoC4目录下放置J-Link烧录的批处理文件:
创建 S2Convert&Load.bat文件,首先将hex文件另存为bin文件,然后实现JLink的下载
ihex2bin.exe P4RTT.hex @echo off set "_DEVICE_=CY8C4147XXX-SXXX" if exist "JLink.exe" ( JLink.exe -device %_DEVICE_% -CommanderScript S2LoadJLinkFW.jlink goto END ) else ( echo JLink.exe not present in folder. Press any key in order to use windows registry to locate JLink.exe ) pause :END pause goto :EOF :ERR echo Error: J-Link software and documentation package not installed or not found. pause
S2LoadJLinkFW.jlink内容为:
speed 4000 si SWD r sleep 10 loadbin P4RTT.bin, 0 r g q
剩下的就是打开RTTView,编译完成后双击S2Convert&Load.bat即可,会自动下载并运行app。如下图示:
欢迎留言交流,稍后更新源码下载地址。