[应用相关] U盘升级

[复制链接]
1794|5
 楼主| guyan1987 发表于 2015-8-7 19:47 | 显示全部楼层 |阅读模式
新手做U盘升级(USB HOST+IAP),出现问题:U盘中.BIN文件小于12K,正常升级。大于12K只更新12K代码,MDK4,查看flash内容,只写了12K内容,不管每次写FLASH内容,为 512,1024,还是4096.都是这样。部分代码如下:
                         IAP_PrepareSec(FlashSector_i, FlashSector_i); // 选择扇区
                     IAP_EraseSec(FlashSector_i,FlashSector_i); // 擦除扇区
                    do {
                bytes_read = FILE_Read(fdr, UserBuffer, MAX_BUFFER_SIZE);  //从U盘中,读.BIN文件每次最大4096;#define  MAX_BUFFER_SIZE             (4096)       

                            for(i=0;i<MAX_BUFFER_SIZE;i++)
                                {
                                        UART1Buffer[i]=*UserBuffer++;
                                }
                           IAP_PrepareSec(FlashSector_i, FlashSector_i); // 选择扇区
                        IAP_CopyRAMToFlash(User_HIGH+num , (DWORD)UART1Buffer, 4096);//从U盘中读bytes_read字节,就写到FLASH中       
                                num=num+bytes_read;
            } while (bytes_read);
 楼主| guyan1987 发表于 2015-8-7 19:47 | 显示全部楼层
U盘文件系统,FAT16格式
可可球 发表于 2015-8-9 11:46 | 显示全部楼层
没有做过,只能帮顶
宛豆苗 发表于 2015-8-14 17:25 | 显示全部楼层
你这个太多的函数看不多原型,从你的结构来看ERASEsec并没有包含在DO{}WHILE里面,下面给给你一个标准的例程供你参考。

STM32_USB-Host-IAP_V1.0.0RC2.7z.zip

870.38 KB, 下载次数: 26

想做大牛的小马 发表于 2015-8-17 16:37 | 显示全部楼层
这里面涉及到usb host和读写flash两块,这个问题看起来像是你软件的问题!
可以做如下测试
1. 文件大于12K时,先分批读到RAM里看是否正常,看能否读到12K以后的内容,按理说应该没有问题!
2. 找一块空闲RAM,随便写入值,大小为13K,然后将这段RAM内容写进FLASH,看是否成功!
 楼主| guyan1987 发表于 2015-9-18 15:40 | 显示全部楼层
想做大牛的小马 发表于 2015-8-17 16:37
这里面涉及到usb host和读写flash两块,这个问题看起来像是你软件的问题!
可以做如下测试
1. 文件大于12K ...

从U盘中读12K内容到RAM中正常,读>12K内容,系统死机。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

133

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部