【说明】 1.为什么使用OpenOCD? 因为ARM公司不可能提供给我RDI协议和许可,还好有GDB这个开源的调试工具,而EWARM 5.11戏剧性的支持了这个协议,如果以后RVMDK也可以支持GDB的话,那也可能同样可以支持O-Link了。 2.我测试的速度 笔记本是IBM T60,T7200的CPU,2G的RAM,使用IAR EWARM 5.11通过GDB Server连接到OpenOCD后,调试STM32的一个简单Demo程序(亮亮LED而已),设置了5个端点,可以正常调试。通过IAR显示的信息的第一行(速度)测试速度,平均7.50KB/s(RPBF时7.91KB/s)。以上测试的O-Link的固件代码为IAR EWARM 5.11编译,使用最大size优化。 3.开发O-Link使用的工具 硬件使用KiCAD制作 固件使用Codesourcery的GCC或者IAR EWARM 5.11 Kickstart(RVMDK还有一个设置问题没解决) 4.上位机支持 目前支持所有可以使用GDB Gerver的上位机,包括各种xxxx-gdb和IAR EWARM 5.11(可以在Linux下正常模拟运行)。MDK目前没有支持GDB Server,所以不能支持O-Link。 5.使用的开源协议 目前暂定使用GPLv2协议,不排除以后升级更新的GPL协议。所有资料都可以免费使用,但没有得到许可的话不得用于商业目的。 6.其他具有JTAG接口的芯片的支持 目前已经测试的可以支持STM32,LPC,AVR芯片 7.USB协议(暂时使用,如果有版权问题,请立即通知,我马上修改) 使用了和JLink totally different的协议,没想到即使调试STM32,jtag速度也可以设置到更高了(找到了原来jtag速度加快stm32容易出错的原因),目前测试速度突破7KB/s,并向8KB/s挺进 /// no parameters /// return version string #define OLINK_CMD_CONN 0x80 /// no parameters /// no return data #define OLINK_CMD_DISCONN 0x81 /// parameter 1(1 byte): jtag speed /// no return data #define OLINK_CMD_SET_SPEED 0x82 /// parameter 1(1 byte): port mask /// parameter 2(1 byte): port data /// no return data #define OLINK_CMD_SET_PORT 0x90 /// parameter 1(2 bytes): length in bytes /// parameter 2(length in bytes): JTAGSEQ Commands /// return data: JTAGSEQ return data #define OLINK_CMD_HW_JTAGSEQ 0xA0
/// parameter 1(length in bytes): tms data /// no return data #define OLINK_CMDJTAGSEQ_TMSBYTE 0x00 /// parameter 1(length in bits): tms data /// no return data #define OLINK_CMDJTAGSEQ_TMSBIT 0x10 /// parameter 1(1 byte): length in bytes /// parameter 2(length bytes): tdi data, last 2 bytes are tms data /// return data: tdo data #define OLINK_CMDJTAGSEQ_SCAN 0x20
1.MDK设置问题,我上传的代码起始地址为0x08002000,IAR和GCC的设置都搞定了,但MDK不知道怎么配置链接脚本,设置R/O base为0x08002000的话,会有错误提示说".DebugObjO-Link.axf: error: L6938E: Invalid value for --ro-base." MS原因已经找到:http://www.keil.com/demo/limits.asp 谁有正式版的MDK,能帮忙编译一下,我想测试一下速度