打印

基于飞思卡尔MCF51JM128的USB Bootloader

[复制链接]
1344|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lby147258|  楼主 | 2013-8-21 15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好
    我想请教一下,我看了一些文档关于USB Bootloader都是叫做MSD Bootloader,其过程是将单片机当做从机,电脑当做主机,然后将S-record文件放入并解析,最后烧入单片机。我现在想实现直接利用U盘将S19文件放入U盘,通过U盘将程序烧入单片机,现在我已经实现了将S19文件读出并解析,但是在擦写和烧入过程中总是出现程序出错跑飞,也不知道为什么。希望各位前辈能帮帮我,给予一些指点和帮助,谢谢了!

相关帖子

沙发
lby147258|  楼主 | 2013-8-22 13:15 | 只看该作者
哪位前辈能帮帮我呀!
byte Flash_Prog(dword flash_addr,dword data_addr,byte number)
{
   
   byte i;
   FnCmdInRam = (void*)((dword)&CmdInRam);
   CmdInRam = *(CmdInRam_t *)(Flash_Cmd);
   
   FSTAT = 0x30;
   
   for(i=0;i<number;i++)
   {
      *(dword *)flash_addr = *(dword *)data_addr;
      
      result= Flash_Cmd(0x20);
      if(result == 0xFF)
      return 0xFF;
      flash_addr +=4;
      data_addr +=4;
   }
   
   return result;
}
为什么这段写flash程序总是出问题呢?一直写不进去。flash的擦出倒是没什么问题。哎!想了好几天了啊

使用特权

评论回复
板凳
lby147258|  楼主 | 2013-8-23 14:14 | 只看该作者
哎,经过一天调试,写Flash终于可以写了,但是发现擦除Flash又出现了问题。发现只能擦出一次,再次擦除下一个块就不行了,也不知道为什么,求前辈指点啊!
代码如下:
// sector erase (1k bytes)
byte Flash_Erase(dword addr)
{
    FnCmdInRam = (void*)((dword)&CmdInRam);
    CmdInRam = *(CmdInRam_t *)(Flash_Cmd);
    FSTAT = 0x30;         
   
    *(dword *)addr = 0x55;
   
    return(FnCmdInRam(0x40));   

}

写了一个这样的语句,发现只有执行第一个Flash_Erase(0X00007400);是正常的,第二个就不正常了,希望得到解答啊
     Flash_Erase(0X00007400);
//     Flash_Erase(0X00007800);
//     Flash_Erase(0X00007C00);
恳请大神前辈赐教啊!多谢了

使用特权

评论回复
地板
lby147258|  楼主 | 2013-8-23 17:49 | 只看该作者
通过今天的调试,我发现问题渐渐明白的,这个和写Flash和擦Flash都没有关系,是正常的,没问题的,现在的问题是由于这个USB Bootloader需要文件系统,通过不断的读数据,将数据烧写入Flash,但是现在的问题是由于我的Bootloader的代码位置从Flash地址0X00000410-0X0006FFF。后面的地址存放的是我应用程序的代码,这个应用程序不大大概是0X00007000-0X00007C00.我发现进行块擦除的时候,从地址0X00007000-0X000073FF和0X00007800-0X00007BFF这两块连续擦除是没问题的,但是一旦擦除地址0X00007400-0X000077FF就会出现Bootloader段的代码程序跑飞,就是文件系统进行读数据时出现问题(也就是运行F_read这个函数时出现问题)。我很奇怪,我应用程序的代码和Bootloader的代码是彼此独立的,并且是放在不同地址块的,并且Bootloader代码已经进行了保护,按道理,我擦除应用程序代码和Bootloader的代码一点关系都没有啊?为什么会影响Bootloader代码段的文件系统。还请前辈大神指点一下,谢谢啦!

使用特权

评论回复
5
lby147258|  楼主 | 2013-8-24 09:11 | 只看该作者
本帖最后由 lby147258 于 2013-8-24 09:16 编辑

我所使用的软件是codewarrior6.1,经过调试我发现了,在进入F_read这个函数时,通过反汇编可以看出,它会突然跳转到0X00007798这个地址,运行了一段CF_runtime.c里面的程序。不是很了解CF_runtime.c的文件,也不知道怎么才能解决。还请前辈大神给予指点帮助啊!

使用特权

评论回复
6
lby147258|  楼主 | 2013-8-26 11:05 | 只看该作者
终于解决了。挺高兴的。不过这个论坛实在太冷清。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

0

粉丝