|
原网址http://blog.sina.com.cn/s/blog_70bb32080100lx1h.html
距离上次更新已经3个多月了。
这段时间我工作的重点在电磁兼容测试上,这东西估计没有什么人有兴趣吧?其实通过测试很简单,对策也就是那些,就是这事情很烦琐。幸好我们公司有Schaffner的快瞬、浪涌发生器和ESD枪,在我无数次的实验轰炸下,把某个我设计的产品抗扰度,快瞬由不到1000V提高到4800V(我们公司标准比国标高多了),ESD由不到1000V提高到15000V空气和8000V接触;还有另一个产品,把差模浪涌从炸机提高到1500~2000V,可惜还有待提高。累死了,光装卸时拧螺钉就拧了能有一千次,后来不行了,申请了个电动螺丝刀……做完测试,我的收获还是很大的,明白了该如何接地、如何屏蔽、如何进行内外互联;相应的,设计产品的风格也变了一些,终于自我感觉入了设计牛X产品的大门了。下一步还有个可靠性需要摸索,还需努力啊,等加速寿命试验做完了,估计就完成绝世武功目录的学习了,嘿嘿。感觉这段时间的收获就是在小公司的好处,可以接触到产品设计的每一个细节。
在业余时间,我启动了一个计划——Mum,这是一个用BF系列DSP进行视觉东东开发的计划,分为Mum、MumBurst和MumSW(SWfor Silkworm)三个阶段,哈哈,上MOP的同学们可以很快看出来含义。
MumJTAG是整个计划的第一步,这是个FT2232电缆,可以通过OpenOCD调试ARM,通过urjtag和gdbproxy调试Blackfin。MumJTAG和HubertHoegl的USB to JTAG Interface电缆(http://www.hs-augsburg.de/~hhoegl/proj/usbjtag/usbjtag.html)是兼容的,但是速度比它快,可以到6MHz,不用它的VID和PID,所以配置文件还需要修改。至于Blackfin调试,我参考了gnICE(http://blackfin.uclinux.org/gf/project/stamp/frs/?action=FrsReleaseBrowse&frs_package_id=146),但为了和ARM调试兼容,也要修改配置。不过这对开源项目来讲,不算什么难事。转载本文,请注明来自我是一只鱼的EE小站,邮件cosine@126.com。
先介绍下FT2232电缆。也许有的人不知道这个电缆,但没有搞嵌入式的人不知道Wiggler的各种Clone;FT2232电缆就可以看作Wiggler的升级版本。它的特点是,便宜(批量成本大约50~60RMB),速度快(下载速度可以达到60~70KB/s),可以配置成JTAG和串口并存的模式(非常适合笔记本电脑),开源。嘿嘿,惭愧,在我写“最低成本的ARM调试解决方案”(http://xianzilu.spaces.live.com/blog/cns!4201FDC93932DDAF!485.entry)的时候,我还不看好FT2232电缆,直到我发现它可以调试Blackfin以后,兴趣才来了。
MumJTAG的简要信息:
- 使用FTDI的FT2232D为USB和JTAG协议转换芯片,协议转换过程由PC上的软件控制
- 20针ARM JTAG接口和Blackfin转换板
- 串口一个
- 目标板电压范围1.6V~5.5V
- JTAG最高频率6MHz
国内其实已经有人用FT2232做出电缆来了,比如Simon的Versaloon(http://group.ednchina.com/1065/)和淘宝有售的OpenJTAG。Versaloon看起来卖得不好,我觉得主要的问题是Simon想用擅长于GDB调试的东西去占领已经被各种成熟仿真器占领的,并不需要GDB调试的单片机开发市场,而且宣传的力度又不够。至于OpenJTAG,我觉得设计者把FT2232电缆+OpenOCD拿来赚钱这一点非常失败,首先FT2232电缆完全开源的;再者170这个价格和我刚才提供的实际成本有很大差距;另外,OpenJTAG怎么面对现在只有100块钱的盗版J-Link?当然,也许OpenJTAG设计出来的时候,盗版J-Link还没有这么便宜;但现在情况已经是这样了,OpenJTAG还卖得动么?
因此,MumJTAG从诞生起就完完全全开源,原理图、Gerber、BOM、调试代理程序映像都公开,想自己做的就自己做;我可能会开淘宝店卖空板,还没有想好。目前,在AT91RM9200和AT91SAM9263上试了下,可以用;在BF531的板子上试了下,可以用Insight修改内存数值,我对Blackfin的开发还不熟悉,目前没有跑程序,所以BlackfinGDB调试的结果未知。另外说一下,Blackfin的调试工具urjtag和gdbproxy编译起来太复杂了,具体过程看我后面的文章。
经过我的努力,已经解决了MumJTAG目标板上电时OpenOCD说找不到FT2232的BUG。毕竟我是做工控设备的,MumJTAG设计时考虑了脉冲群、静电对策,并对目标板交流电源冲击采取了抗扰措施;我做了几百次电源冲击测试,还用我这个天天和铁桌腿、水龙头放静电的肉身做了几十次放电测试(对比真正的ESD枪的击穿距离,我觉得放电大概有3000~4000V,好疼啊);目前来看,MumJTAGV1.1版还比较稳定,单纯从电路上看,相信MumJTAG比现有所有FT2232电缆都稳定。当然,家里的测试条件有限,不能模拟所有的情况;如果你使用MumJTAGV1.1 Gerber做的板子出现问题,欢迎与我联系:cosine@126.com。MumJTAG将不断更新,请关注EE小站。(更新日期2009年3月28日,如果你看到的是转载的文章,请从这里查看最新信息http://xianzilu.spaces.live.com/blog/cns!4201FDC93932DDAF!786.entry)。
请注意我在BOM中选取的元件具体型号,钽电容的耐压、ESR,磁珠绝对不能用电感或零欧姆电阻代替,否则稳定性会下降很多。串口插座我用了带共模滤波器的器件,当然也可以用不带滤波器的,但是这样会稍微降低稳定性。
MumJTAG原理图:http://cid-4201fdc93932ddaf.skydrive.live.com/self.aspx/Mum%e8%ae%a1%e5%88%92/MumJTAG/MumJTAG%201.1.pdf。
MumJTAG Gerber:http://cid-4201fdc93932ddaf.skydrive.live.com/self.aspx/Mum%e8%ae%a1%e5%88%92/MumJTAG/MumJTAG%201.1%20Gerber.rar
MumJTAG BOM:http://cid-4201fdc93932ddaf.skydrive.live.com/self.aspx/Mum%e8%ae%a1%e5%88%92/MumJTAG/MumJTAG%201.1%20BOM.xls
Blackfin转接板原理图:http://cid-4201fdc93932ddaf.skydrive.live.com/self.aspx/Mum%e8%ae%a1%e5%88%92/MumJTAG/ARM2Blackfin%201.0.pdf
Blackfin转接板Gerber:http://cid-4201fdc93932ddaf.skydrive.live.com/self.aspx/Mum%e8%ae%a1%e5%88%92/MumJTAG/ARM2Blackfin%201.0%20Gerber.rar
Blackfin转接板BOM:http://cid-4201fdc93932ddaf.skydrive.live.com/self.aspx/Mum%e8%ae%a1%e5%88%92/MumJTAG/ARM2Blackfin%201.0%20BOM.xls
先上一张做好的MumJTAG图片:
JTAG调试电缆(FT2232电缆)硬件制作" title="Mum计划之MumJTAG——ARM和Blackfin JTAG调试电缆(FT2232电缆)硬件制作">
梳理下制作MumJTAG需要做的事情:
- 设计FT2232的PCB或者用我提供的Gerber
- 焊接PCB
- 修改FT2232板载串行EEPROM的内容
- 修改Windows驱动
我的习惯是在Windows下用虚拟机进行Linux开发,所以,我的文章不涉及Linux下驱动,请原谅。设计焊接PCB就不说了,从修改EEPROM开始。
与FT2232配套的,有一片串行EEPROM,其作用是记录用户自定义的设备名称,USB的VID和PID。在EEPROM没有编程的时候,FT2232使用厂家默认的VID0x0403和PID 0x6010。这个http://www.ftdichip.com/Resources/Utilities/MProg.pdf是官方的EEPROM编程工具MProg的使用说明,我下面提供的过程是这份说明的简化版。
在开始之前,请准备这几样东西:
FTDI的链接总有一天会失效,如果这样,请访问http://www.ftdichip.com查找。
先解压缩驱动程序,假设解压到E:\FT2232,然后连接MumJTAG到USB,提示安驱动的时候选择E:\FT2232,这部分不详细写了,相信大家都会。
驱动安好后,打开MProg,出现如下界面:
JTAG调试电缆(FT2232电缆)硬件制作" title="Mum计划之MumJTAG——ARM和Blackfin JTAG调试电缆(FT2232电缆)硬件制作">
然后选择菜单Device>Scan,如果硬件正常,窗口下方应该出现:
JTAG调试电缆(FT2232电缆)硬件制作" title="Mum计划之MumJTAG——ARM和Blackfin JTAG调试电缆(FT2232电缆)硬件制作">
然后选择菜单File>Open,打开下载的MumJTAGEEPROM信息文件"MumJTAG USB 配置文件.ept",窗口变为:
JTAG调试电缆(FT2232电缆)硬件制作" title="Mum计划之MumJTAG——ARM和Blackfin JTAG调试电缆(FT2232电缆)硬件制作">
上图这些,就是需要烧写的配置。可以不用EE小站提供的这个EEPROM信息,但请注意右边的FT2232C/DOptions中的设置,将FT2232设置为Side A为JTAG,Side B为串口;你也可以更改Vendor ID、ProductID、Manufacturer、ProductDescription为你想要的东西。然后点选菜单Device>Program,将信息下载到EEPROM中,拔掉USB插头,硬件方面的动作就完成了。
此时,MumJTAG的VID和PID已经不是FT2232默认的了,FTDI的驱动已经不可用,需要对驱动程序信息进行修改。可以重新解压缩一份驱动程序,例如解压缩到E:\MumJTAG。用文本编辑器打开E:\MumJTAG\ftdibus.inf,修改其中的FtdiHW、FtdiHW.NTamd64、Strings等几段,红色字体表示增加或有变化的部分:
...
[FtdiHw]
%USB\VID_0403&PID_6001.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_6001
%USB\VID_0403&PID_6010&MI_00.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_6010&MI_00
%USB\VID_0403&PID_6010&MI_01.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_6010&MI_01
%USB\VID_0725&PID_6010&MI_00.DeviceDesc%=FtdiBus.NT,USB\VID_0725&PID_6010&MI_00
%USB\VID_0725&PID_6010&MI_01.DeviceDesc%=FtdiBus.NT,USB\VID_0725&PID_6010&MI_01
[FtdiHw.NTamd64]
%USB\VID_0403&PID_6001.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_6001
%USB\VID_0403&PID_6010&MI_00.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_6010&MI_00
%USB\VID_0403&PID_6010&MI_01.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_6010&MI_01
%USB\VID_0725&PID_6010&MI_00.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0725&PID_6010&MI_00
%USB\VID_0725&PID_6010&MI_01.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0725&PID_6010&MI_01
...
[Strings]
Ftdi="FTDI"
DESC="CDM Driver Package"
DriversDisk="FTDI USB Drivers Disk"
USB\VID_0403&PID_6001.DeviceDesc="USB SerialConverter"
USB\VID_0403&PID_6010&MI_00.DeviceDesc="USBSerial Converter A"
USB\VID_0403&PID_6010&MI_01.DeviceDesc="USBSerial Converter B"
USB\VID_0725&PID_6010&MI_00.DeviceDesc="JTAGPort"
USB\VID_0725&PID_6010&MI_01.DeviceDesc="USBSerial Converter"
SvcDesc="USB Serial Converter Driver"
ClassName="USB"
用文本编辑器打开E:\MumJTAG\ftdibus.inf,修改其中的FtdiHW、FtdiHW.NTamd64、Strings等几段,红色字体表示增加或有变化的部分:
...
[FtdiHw]
%VID_0403&PID_6001.DeviceDesc%=FtdiPort232.NT,FTDIBUS\COMPORT&VID_0403&PID_6001
%VID_0403&PID_6010.DeviceDesc%=FtdiPort2232.NT,FTDIBUS\COMPORT&VID_0403&PID_6010
%VID_0725&PID_6010.DeviceDesc%=FtdiPort2232.NT,FTDIBUS\COMPORT&VID_0725&PID_6010
[FtdiHw.NTamd64]
%VID_0403&PID_6001.DeviceDesc%=FtdiPort232.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_6001
%VID_0403&PID_6010.DeviceDesc%=FtdiPort2232.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_6010
%VID_0725&PID_6010.DeviceDesc%=FtdiPort2232.NTamd64,FTDIBUS\COMPORT&VID_0725&PID_6010
...
[Strings]
FTDI="FTDI"
DESC="CDM Driver Package"
DriversDisk="FTDI USB Drivers Disk"
PortsClassName = "Ports (COM & LPT)"
VID_0403&PID_6001.DeviceDesc="USB SerialPort"
VID_0403&PID_6010.DeviceDesc="USB SerialPort"
VID_0725&PID_6010.DeviceDesc="MumJTAG"
SvcDesc="USB Serial Port Driver"
SerEnum.SvcDesc="Serenum Filter Driver"
这样,驱动程序就修改好了。将MumJTAG的USB电缆连上,提示安装驱动的时候,将路径指向E:\MumJTAG。
至此,MumJTAG就制作完成了。要验证它能不能用,我们还需要使用OpenOCD、urjtag和gdbproxy,请看我后面的文章。
|
|