我不是那种热衷于摆弄各种工具的人。我认为工具仅仅只是工具,重点应该在解决问题上。我希望自己使用的工具不会过时,在这些工具上积累的经验也不会过时。gcc就是这样的工具,它从1985年诞生至今,在基本使用方法上没有太大的变化。它也继承了更为古老的UNIX
C编译器的许多优秀基因,成为许许多多老程序员的至爱。ARM仿真器的选择也是这样的,它应该不会因为外部环境的改变而不能使用:它不能因为系统从Windows变成了Ubuntu就不能使用了;它也不能因为硬件接口的更新换代而影响继续使用(并口在越来越多的机器上都看不到了)。我希望它可以成为抽屉里的第二块“万用表”,也可以用上十年二十年而不会被淘汰。既然是第二块“万用表”,它一定不会造价高昂,让人望而却步;它也一定不会因为造价低廉而效率低下。我就是在这样的理念下设计我自己的ARM仿真器的,NetICE应运而生。
常见的仿真器分为两种类型。其中的一种类型由两个基本部分组成:调试器硬件部分和主机上运行的代理程序。J-Link、U-Link、H-JTAG和OpenOCD都是这样的结构。例如:J-Link的硬件部分只传输数据和生成JTAG时序,而包括JTAG数据编码和解码的大多数工作在代理程序RDI.dll中完成。但是,RDI.dll只能在Windows上使用,它不能跨平台,一旦遇到Windows版本升级或着打补丁,其兼容性将倍受考验。
还有一种类型是把所有的功能都集成到了一起。如:BDI2000、EPI Jeeni就是这样的结构。这一类型中,代理程序不是运行在主机上的,而是作为firmware的一部分运行。它在结构上比前一种类型更加的独立,再加上使用网口作为和外部世界的通信接口,它不会困扰在接口驱动程序这个环节上。得益于这些结构特点,它可以方便的跨平台,同时它受到外部升级活动的干扰也降到了最低。
这张是用NetICE在STM32上调试自己写的嵌入式操作系统时的照片。NetICE后面的那根黑色的网线接在一个8口的100M网络交换机上,我的Linux主机也接在上面。
NetICE属于和BDI2000一样的第二种类型。与其它仿真器不同的是:它是在单芯片MCU上实现的,同时它也没有使用包括FPGA等专用芯片在内的JTAG硬件时序生成装置,所以造价低廉。
这张照片是NetICE的内部,里面有3个芯片:以太网PHY、主控MCU -- AT91SAM7X256和用于电平转换的Buffer
但是便宜并不意味着低效率,NetICE使用SPI_DMA+GPIO的JTAG时序生成算法,数据传输速度远远超过Wiggler。在速度这个问题上我的看法是:任何东西都有一个效费比,更快的速度和更低的造价本来就是矛盾的两个方面。对于绝大多数嵌入式开发而言,花费5秒的下载时间和花费不到1秒的下载时间在使用体验上没有太大区别。
这些数据是在Fedora 12下用tftpw下载功能测得的,表格中的Kbps是Kbit/s,不是KByte/s
文章评论(0条评论)
登录后参与讨论