最近一个月都在搞USB升级程序,从最基础的看起,到最后自己画出整个boot的流程图。废话不多说,今天终于将程序调通。但是,出现了问题;
问题背景:我采用SL811HS芯片作为USB控制器,U盘文件格式为FAT32,内部升级程序文件为test.bin。
问题描述:我写了一个非常简单的程序,通过定时器中断对某个LED进行控制,每0.1s进行亮灭切换,最后将test.out文件通过hex2000工具转换成test.hex;转化CMD命令:
hex2000 -romwidth 16 -memwidth 16 -i -o test.bin test.hex
然后,我使用WINHEX工具将test.hex转化成test.bin(这里有些奇怪,我使用的是F2812芯片,所有片内FLASH扇区都参与工作[与项目需求相符合],经转化后得到的test.hex为10.3KB,而转化成.bin为35KB,不明白为什么)。 结果,问题出现了,我通过查看View Memory Windows清楚的得知,程序已经顺利烧录进片内FLASH中,为了确认事实,在断电后,我再次上电连接,通过汇编代码也得到了相似的认证,可程序就是无法运行。
后来,我对test.bin进行反向转化为test.hex(中间经过AES加密),发现前面大约有0x4000左右的未使用区域,它采用0xFF来代替,实际上,我查看了升级程序的汇编代码,发现不存在这种现象。我明明从0x3D8000开始烧录,结果,实际情况是从0x3DC000开始烧录,而0x3D8000~0x3DC000的值都为0xFFFF。
至此,我把自己能验证的方法都试了一遍,不太清楚到底问题出在哪里,有没有哪位可以提供些许帮助,或者,给予个链接,我自己去看。(从接触到现在学了6个月,有些东西说的不明白,请大家谅解。) |