最近在搞Zigbee通信,在淘宝上淘了几块CC2530的开发板来学习,想同时用2个RF04EB进行在线调试的时候才发现电脑只能识别出一个,查了一下原因就是因为2个RF04EB的usb ID都是0x50,所以只识别出一个,于是在网上查找修改USB ID的方法,确实是有几个较好的教程,比较详细是这个帖子:
http://www.amobbs.com/thread-5576670-1-1.html赶紧下下来研究一番,有前辈的经验就好办了,顿时喜上眉梢,就要开始着手准备了,才发现手头没有Slicon公司C80051F320这个单片机的烧写器,一下整个人都感觉不好了,又百度了C8051单片机的烧写程序的方法,基本都要烧写器的,淘宝上有卖,但是想想就这么点需求还是不要买了,看到芯片资料里有一个C2接口可以实现烧写程序,找了相关资料,发现有人利用电脑并口转C2/JTAG接口配合相应的上位机程序能实现程序烧写,就在公司找带并口的老电脑,终于还是发现一台,跟同事说明情况后,他同意我在他电脑上拆腾,并口转C2/JTAG的电路图如下:
找齐所需的器件就开始在万用板上面开焊了,搞了一下午才弄好(线路太乱了,看得眼睛都花了,所以焊得很慢很小心,怕给弄错了),怀着激动的心情和电脑连上,结果就是死活提示识别不了未知设备,对一下原理图发现中间的那个电容C2是连在时钟引脚的,怎么会加个电容呢,用来隔直?真搞懂加这个电容的意义是什么,于是把它给短路掉,再连电脑,竟然能顺利识别出来了,信息都是对的,很激动,接下来就擦除,烧写,问题又来了,擦除的时候一路顺风,到写的时候就是写不进去,总是说写操作在0x0010的位置就被终止了,写保护开关也都清了都写不进去,折腾了一上午还是一个样,很气馁,都不想搞了,真想在淘宝上买个新的算了,最后还是抱了一丝希望在Slicon官网上寻找关于C2的资料,还真是有所收获,官方有关于C2接口的通信协议,写得很详细,而且还有示例代码,顿时萌生了“为什么不自己根据协议做个烧写器”想法,脑子里在不断构思要实现烧写器要做的事情,觉得还是可行的,唯一不好处理的是怎么读取hex程序文件问题,虽然hex格式的程序文件解码还是相对比较简单的,但是里面的的每个字都是字符数据,而不是16进制数据,电脑上位机我不会写,把hex文件加载烧写器的Flash中又太复杂(得定义一个16K的常量数组,不好弄啊)。转念一想,前段时间有搞过FatFS文件系统移植,可以把程序文件存在SD卡中,再读出来一个一个再写入就好了,思路定下来后,就开始在LaunchPad上开搞了(最熟悉的平台了,而且才在上面做完12864的三种接口的驱动程序统一化,LCD都还没有取下来呢,顺便能打印一些信息)。
花了一晚上时间,把文件系统和SD卡还有C2接口的功能都调通了,接下来就是按照前辈的方法来修改bootloader并且烧进去了。一开始我先用Hex转Bin文件的小工具把要修改的srf04dd_bootloader.hex转为Bin格式的文件,发现了个问题,转出来的文件中hex文件中没有用到的存储空间全部被0给填充了,由于我使用的是整个Flash从头到尾的写入模式,如果不对这些0进行处理,肯定会是有问题的,我尝试着烧进去,果真是一点用都没有,后来还是对着hex文件把换成0的部分进行替换,替换成FF,烧进去就OK了,以下是我的操作步骤:
1、使用记事本打开srf04dd_bootloader.hex文件,将DD改为EB,再将50改为你想要USB ID(只要不和其他的调试器一样就行),8E为检验和,要保证修改完后此行所有字节加起来要为0。再将第20行的第一个44改为45(字符E),第二个44改为42(字符B),相应的校验和也要改。(前辈的帖子里没说要改这个地方,导致烧进去电脑无法识别)。
2、用Hex转Bin工具 Bin_Hex.exe把修改后的bootloader转成Bin文件,再用UE(Ultra Editor软件)打开刚才的Bin文件
会看到很多地方都被填充为00了,我没有找到可以选择填充内容的转换工具,只能对着hex文件把填充为00的地方改为FF,中间有一大片的00,都得改为FF,在最后面的部分从3db0h到3df0h也要改为FF
转出来的Bin文件只到3da0h这一行,需要再往后插入FF(复制前面的FF,插入到后面)到3df0h这一行就可以,C8051F320的3e00h到3fffh的512个字节是保留区,不能擦除也不能写入数据,到此就修改完成了,接下来只需要把此程序文件烧进去就大功告成。
3、打开SmartRF Studio 7,重新插上RF04EB,就能识别出来了,双击就会提示是否要升级固件,点yes就开始在级升级固件,到此就完结了。
4、连接图
本文来自论坛,点击查看完整帖子内容。