话说:前日已成功将开发环境移植到了GCC+Make,这样开发基本上可以移植到Linux下了,可惜光开发不行,还得要有烧写下载到芯片啊。LMI基本没提供Linux下的下载工具(LM Flash Programmer 只有WIN平台的)。这不,在网上巡逻一圈,发现了OpenOCD这东西。遂开始折腾了。先谈谈对OpenOCD几个比较深刻的体会:

  • 版本升级后变迁极大!从0.1到0.2,两个版本的操作命令相差极大,而且没有兼容提示,只是提示个“unknown command”;

  • 文档搞得有点……,还要先安装个Tex才能编译个PDF文档,也不能编译html文档,幸而官方网站上有最新的文档。

  • 文档非常重要,没有文档基本上俩眼一抹黑,而且文档的版本和软件的版本必须要个配套;

  • 配置莫名其妙,有些指令必须在前一个指令生效的情况下才行,否则直接提示“unknown command”,莫非OpenOCD的开发人员对此句情有独钟?

抱怨完了,开始进入正题。首先,我的硬件是ZLG出品的EasyARM1138,CPU为LMI的LM3S1138,调试接口为FT2232。软件环境是ArchLinux,kernel 2.6.31,gcc 4.3.1(Sourcery G++ Lite)。OpenOCD版本是0.2。

先贴一贴我的OpenOCD配置文件

配置文件中需要特别注意的是,在EasyARM(LM3S1138)这块板(芯片)上,最好不要在SRAM中使用加速工作区,尤其当要变成的文件比较大(大概超过3K)的时候,因为这样会导致无法下载甚至芯片死锁。所以上文中的脚本里,把该行注视掉了。后果就是下载速度变慢了(0.5Kb/s),不过总比锁死了芯片然后找台Windows用LM Flash Programmer解锁的好吧。

具体原因我尚未搞明白,初步估计是因为工作区太小,以至于在下载较大文件的时候会出现文件头部被截断或者覆盖掉了。

另外就是说几个比较常用的命令:

  • 复位命令:语法是reset [run|halt|init],用于复位芯片,在下载程序前需要运行reset halt或者halt,使芯片进入挂机状态,才能下载。下载后用reset run使芯片运行起来。不加参数的reset等效于reset run

  • 下载文件:语法是flash write_image [erase] 文件路径 [offset] [bin|hex|elf],erase可选,表示编程前是否擦除,建议擦除。offset通常为0,可以不加。bin、hex、elf为编程文件的类型,不指定是默认为bin

附:OpenOCD的编译过程