打印
[应用相关]

U盘升级

[复制链接]
1282|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

使用特权

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

使用特权

评论回复
6
guyan1987|  楼主 | 2015-9-18 15:40 | 只看该作者
想做大牛的小马 发表于 2015-8-17 16:37
这里面涉及到usb host和读写flash两块,这个问题看起来像是你软件的问题!
可以做如下测试
1. 文件大于12K ...

从U盘中读12K内容到RAM中正常,读>12K内容,系统死机。

使用特权

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

本版积分规则

29

主题

133

帖子

2

粉丝