您的位置:控制工程论坛网论坛 » 电机与运动控制 » 这两天调BOOT的一点心得

jiewinds

jiewinds   |   当前状态:离线

总积分:200  2024年可用积分:0

注册时间: 2003-05-12

最后登录时间: 2007-01-25

空间 发短消息加为好友

这两天调BOOT的一点心得

jiewinds  发表于 2004/12/13 18:06:36      3108 查看 0 回复  [上一主题]  [下一主题]

手机阅读

我做的bootload的方法不是标准的方法。方案大致是先load要烧的主程序,然后load烧 写程序,把主程序的代码当作数据写到FLASH中。然后利用DSP固化的程序把flash中的代 码搬到DSP中,实现自举运行。 我采用的DSP是VC33,FLASH是AM29LV800B 硬件连接如下:   我硬件接是: DSP FLASH   page1\ cs\    r/w\ we\     (非r/w\)或strb\ oe\ reset\接3.3V /RDY 非ry/by\ BOOT采用中断INT1,即INT1接地。DSP复位后检测到INT1后,从外部地址400000H进行搬 移。由于FLASH是16位的,所以两个地址写入一个DSP代码。 以下是我下入FLASH中的代码 0x400000 0010 ;表明FLASH长度为16位 0x400001 0000 0x400002 00f8 ;设置总线控制寄存器 0x400003 0000 0x400004 0100 ;程序区块的长度 0x400005 0000 0x400006 1000 ;程序区块的起始地址,即入口地址 0x400007 0080 ............. ;程序块的代码 0x400208 0100 ;数据区块的长度 0x400209 0000 0x400210 6000 0x400211 0080 ;数据区块的起始地址 ................ ;数据块的代码 0x400412 003f ;向量区块的长度 0x400413 0000 0x400414 9fc1 0x400415 0080 ;向量区块的起始地址 ................ ;向量表的代码 0x400492 0000 0x400493 0000 ;结束标志 对FLASH擦除和编程的方式在FLASH的说明上有,就不多说了。这里需注意几点: 1、 对FLASH的操作应该是先复位,再擦除,然后编程 2、 根据DSP的固化程序,BOOT后的入口地址是BOOT时的第一个块的起始地址,所以必须 将程序区块作为第一个块写入 3、 在执行擦除时需要加比较长的等待时间,这个可以根据FLASH说明中的时序图得知 4、 写完最后一个块后,写入0表明结束。因为在DSP的BOOT程序中,当搬到0长度块时, BOOT程序就会跳到第一个块的起始地址运行。 5、 写入块的代码时,长度须与前面写入的块的长度匹配 6、 由于对FLASH的写入时,FLASH内部有一个编程的时间,所以写完一个后加一定延时 。 7、 主程序和烧写程序的.cmd中的地址空间不能冲突,不然load烧写程序时复盖掉要烧 入FLASH中的主程序的代码。 我用了一个测试的小程序烧写,BOOT后可以正常运行。可能烧大程序时还会遇到些问题 但思路应该差不多。 以上算是这两天这BOOT的一些心得,由于刚学DSP,属于菜鸟水平(实话,呵呵),有错 的地方希望多多指点。另外,现在用的是VC33,做这款DSP的同学比较少,资料也不多, 希望有做VC33的多多交流。 我的目标是:每天进步一小点,呵呵 最后,谢过这几天帮助过我的各位大虾,谢谢你们的指点。
1楼 0 0 回复