Versaloon支持AVR和AVR32的方式是模仿JTAGICE mkII,所以使用上相对简单很多,只是使用官方的开发环境即可。但Versaloon对ARM的支持是通过OpenOCD来实现,OpenOCD目前在国内还是非常少使用的(可能中国人不喜欢开源的东西吧),所以介绍一些OpenOCD的使用还是非常有必要的。 【介绍】 OpenOCD是一个开源的JTAG上位机程序,主页在http://openocd.berlios.de/web/,论坛在http://forum.sparkfun.com/viewforum.php?f=18。目前支持多种芯片,可以简单查看src/target/target.c中的target_types的定义就可以了解支持哪些处理器了: target_type_t *target_types[] = { &arm7tdmi_target, &arm9tdmi_target, &arm920t_target, &arm720t_target, &arm966e_target, &arm926ejs_target, &feroceon_target, &xscale_target, &cortexm3_target, &arm11_target, &mips_m4k_target, NULL, }; 并且支持的芯片还在不断增加中。 支持的编程工具,主要是并口的JTAG工具和基于FT2232的JTAG工具。当然,由于源代码都是公开的,并且可以自己编译,所以增加自己定义的工具的驱动也是相当容易的。 【编译安装】 自己编译安装OpenOCD可以参考DIY Versaloon中的DIY OpenOCD部分。 一定要注意doc/openocd.pdf文档(需要编译生成),里面有各个配置和命令的详细说明。 【配置】 OpenOCD需要针对不同的JTAG工具和不同的目标芯片,配置一个配置文档。 一般而言,配置文档分为4个部分 1.分别是定义各个接口的Port(比如telnet_port,gdb_port,tcl_port) 2.JTAG工具的定义 3.目标的定义 4.脚本的定义 接口Port的定义一般如下(非特殊情况,无需修改,定义了一些端口号) telnet_port 4444 gdb_port 3333 tcl_port 6666 JTAG工具的定义,一般在工具的主页里会提供,而且针对不同的目前芯片,这个定义不需要修改。 目前芯片的定义,是用来告诉OpenOCD,你的JTAG链是如何连接的(以什么顺序,链接了那些目标芯片)。OpenOCD支持的芯片的定义,基本在src/target/target目录中都可以找到对应的配置文件。 脚本的定义,对于最新版本的OpenOCD尤为重要(最新的OpenOCD去掉了一些配置,而使用脚本的方式来实现)。脚本主要实现了如何操作目标芯片,不同的目标芯片的操作方式会有区别。 OpenOCD的配置基本可以使用现成的一些配置,一般在使用的JTAG工具的主页上可以找到。 【使用】 OpenOCD的启动可以直接调用openocd.exe程序,改程序会自动寻找openocd.cfg默认配置。当然,可以使用-f参数来指定使用的配置文件,比如: openocd -f openocd_stm32.cfg 如果配合Makefile来实现编译完成后自动下载固件的功能的话,可以使用OpenOCD配置文件的脚本配置部分,以脚本的方式来实现自动的固件下载。 如果需要使用GDB或者手动操作目标设备的话,在配置文件的脚本部分中,只需要初始化目标芯片的脚本即可。然后可以通过telnet或者gdb或者tcl来连接上OpenOCD。 【示例】 比如使用STM32的OpenOCD支持的时候,可以键入命令openocd -f openocd_stm32.cfg,界面如下:
然后可以使用telnet到4444端口(telnet localhost 4444),之后可以键入各种操作命令:
当然,也可以使用gdb或者IAR EWARM5.11以后支持的GDB Server的方式连接上OpenOCD来实现编程和调试的功能。