大家好
我想请教一下,我看了一些文档关于USB Bootloader都是叫做MSD Bootloader,其过程是将单片机当做从机,电脑当做主机,然后将S-record文件放入并解析,最后烧入单片机。我现在想实现直接利用U盘将S19文件放入U盘,通过U盘将程序烧入单片机,现在我已经实现了将S19文件读出并解析,但是在擦写和烧入过程中总是出现程序出错跑飞,也不知道为什么。
通过调试,我发现问题渐渐明白,这个和写Flash和擦Flash都没有关系,是正常的,没问题的,现在的问题是由于这个USB Bootloader需要文件系统,通过不断的读数据,将数据烧写入Flash,但是现在的问题是由于我的Bootloader的代码位置从Flash地址0X00000410-0X0006FFF。后面的地址存放的是我应用程序的代码,这个应用程序不大大概是0X00007000-0X00007C00.我发现进行块擦除的时候,从地址0X00007000-0X000073FF和0X00007800-0X00007BFF这两块连续擦除是没问题的,但是一旦擦除地址0X00007400-0X000077FF就会出现Bootloader段的代码程序跑飞,就是文件系统进行读数据时出现问题(也就是运行F_read这个函数时出现问题)。我很奇怪,我应用程序的代码和Bootloader的代码是彼此独立的,并且是放在不同地址块的,并且Bootloader代码已经进行了保护,按道理,我擦除应用程序代码和Bootloader的代码一点关系都没有啊?为什么会影响Bootloader代码段的文件系统。
我所使用的软件是codewarrior6.1,经过调试我发现了,在进入F_read这个函数时,通过反汇编可以看出,它会突然跳转到0X00007798这个地址,运行了一段CF_runtime.c里面的程序。不是很了解CF_runtime.c的文件,也不知道怎么才能解决。还请前辈大神给予指点帮助啊!谢谢啦