历史上的今天
返回首页

历史上的今天

今天是:2025年01月31日(星期五)

2020年01月31日 | STM32把SD卡内容搬运到内部FLASH之一

2020-01-31 来源:eefocus

首先阅读这篇博文:

STM32操作访问内部flash,包括写入数据到flash和从flash读取数据 :https://blog.csdn.net/Ace_Shiyuan/article/details/78196648

这篇文章写得比较明白,但是它写的函数不饱满,没有把Flash充分写满,意思如下:


请看写数组的函数:FLASHStatus = FLASH_ProgramHalfWord(STARTADDR+WriteAddress+i*2, temp);//写入数据

存在问题:比如写u8 pBuffer[10]={"123456789"};写进去是:01 00 02 00.... 这样的 中间浪费了,/因为u8转u16会自动给前面补0 那就是01 02 03 在写到内存会字节序反过来。

而如果FLASHStatus = FLASH_ProgramHalfWord(STARTADDR+WriteAddress+i, temp);会失败

因为写之前要擦除的,你写了必须后面移动。你写的是00 01 一次写了2个字节。


有两种解决办法,一种实诚,一种高级。


1基于内部FLASH的库函数,自己写扩展函数。

* @param Address: specifies the address to be programmed.

* This parameter can be 0x1FFFF804 or 0x1FFFF806. -----------------测试下 这两个地址也是不能写的!

FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data)----------这个函数放弃使用。至少是写u16的!写u8会失败!

FLASH_Status FLASH_ProgramHalfWord (uint32_t Address, uint16_t Data)--OK

FLASH_Status FLASH_ProgramWord (uint32_t Address, uint32_t Data)--OK


2测试

#define STM32ADDR_ADJUSTMENT  0X08078800  //p241//0X0807F800 //PAGE255  2K

#define STM32ADDR_PAGE        15

u8 pBuffer[10]={"123456789"};

u8 TBuffer[9];

函数:

stm32_flash_page_clear(STM32ADDR_ADJUSTMENT);

stm32_flash_write_Array(pBuffer,STM32ADDR_ADJUSTMENT,9);

stm32_flash_read_Array(TBuffer,STM32ADDR_ADJUSTMENT,9) ;

3擦掉Flash

for(i=0;i{

stm32_flash_read_Array((u8*)buf,STM32ADDR_ADJUSTMENT,1024*2);

for(j=0;j<512;j++)

{

    if(buf[j]!=0XFFFFFFFF)break;   

}

if(j!=512)

    stm32_flash_page_clear(STM32ADDR_ADJUSTMENT+i*1024*2);

}


4开始写

while(res==FR_OK)//死循环执行

{

// res=f_read(fftemp,tempbuf,4096,(UINT *)&bread); //读取数据  

// if(res!=FR_OK)break; //执行错误

// W25QXX_Write(tempbuf,offx+flashaddr,4096); //从0开始写入4096个数据  

//   offx+=bread;   

// fupd_prog(x,y,size,fftemp->fsize,offx); //进度显示

// if(bread!=4096)break; //读完了.

        res=f_read(fftemp,tempbuf,1024*2,(UINT *)&bread); //读取数据  

        stm32_flash_write_Array(tempbuf,i*2018+STM32ADDR_ADJUSTMENT,2048);

         offx+=bread;  

         i++;

fupd_prog(x,y,size,15,i); //进度显示

}

f_close(fftemp);


注意:f_read(fftemp(文件),tempbuf(数组名),1024*2(数组长),(UINT *)&bread(这个变量好,可以告诉你读到多少个,比如你去读2018结果它是23那就是告诉你读完了你只读到了23个));


+++++++++++++++++++++++

unsigned char    UpdateBuffer[256];

  dWrd = *(uint32_t *)&UpdateBuffer[idx];

+++++++++++++++++++++++

推荐阅读

史海拾趣

EMC Technology RF Labs公司的发展小趣事

随着对射频技术的深入研究,RF Labs在多个领域取得了技术突破。他们成功开发了一系列高性能的射频电阻、衰减器、定向耦合器等关键元件,这些产品不仅具有优异的性能,而且能够满足各种复杂的应用场景需求。同时,RF Labs还不断推出创新产品,如智能探测器温度测量端子等,这些产品为客户提供了更加便捷和高效的解决方案。

Artesyn Embedded Technologies公司的发展小趣事

随着5G技术的商用化,电子行业迎来了新的发展机遇。Artesyn Embedded Technologies敏锐地把握住了这一机遇,积极研发适应5G时代需求的电源和嵌入式计算解决方案。公司推出的新产品不仅满足了5G设备对高效、稳定电源的需求,也为公司在5G时代的发展奠定了坚实的基础。

Golledge Electronics公司的发展小趣事

为了更好地服务全球客户,Artesyn Embedded Technologies不断加强其在全球市场的布局。公司在北美、欧洲和亚洲等地设立了区域中心,并通过直接办事处、代理机构以及分销商提供全球性销售与支援。这种全球化的战略使公司能够更好地满足不同地区客户的需求,同时也为公司带来了更多的商业机会。

Digilent公司的发展小趣事

DIALIGHT在全球范围内不断拓展业务,目前在美国、英国、丹麦、德国、马来西亚、新加坡、澳大利亚、墨西哥和巴西等地设有业务。公司的LED产品广泛应用于各种工业场所,包括石油和天然气、矿业、化工、制造业等。通过提供定制化的照明解决方案,DIALIGHT赢得了众多客户的信赖和好评。

汇顶科技(GOODiX)公司的发展小趣事

在全球节能意识日益增强的背景下,DIALIGHT致力于推动绿色照明的发展。公司的LED产品具有高效节能、长寿命和环保等优点,有助于减少能源消耗和环境污染。此外,DIALIGHT还积极参与各种绿色照明项目,为推动可持续发展贡献自己的力量。

康奈特(CNNT)公司的发展小趣事

康奈特(CNNT)公司在电子行业的光学镜片领域一直保持着领先地位。早期,公司面临着镜片透光性、耐磨性等技术瓶颈。为了突破这些限制,康奈特投入大量研发资源,成功研发出了一种新型镜片材料,大幅提升了镜片的性能。这一创新不仅为公司赢得了市场认可,也为整个行业树立了新的技术标杆。

问答坊 | AI 解惑

几个电源单双变换的原理图

应友人之邀,发几个电源单双变换的图纸,PROTEL99SE格式和JPG格式…

查看全部问答>

ise10和11通用破解

如题所示,平常不涉及到商业的研究完全可以使用破解嘛,方便…

查看全部问答>

有高手要带新人吗?无偿劳动力提供

有计算机专业高手要带小弟吗? 本人重点高校大三在校学生! 无偿为你工作!只求工作经验   QQ:274491910 …

查看全部问答>

模拟器如何使用adoce

我看各位讲的天花乱坠的,要把一些.dll文件拷贝到目标机器的windows目录下面,还要注册一个regedit.dll,可是我用的是模拟器,我怎么使用adoce呢?…

查看全部问答>

一个菜鸟,准备进入IC设计

    我想进入IC设计这方面的领域。以前学习软件开发,伴随着软件开发经验越多,感觉硬件太差,这时想搞清楚计算机电路设计构造,尤其是芯片设计。在网上查找了些资料,才发现这时有关IC设计领域的事情。     或许是软件经验太 ...…

查看全部问答>

在wince6.0平台上如何将模拟器中任务栏上的软键盘的位置调整到桌面上的任意一个位置?

在wince6.0界面下,将生成的模拟器界面中的任务栏上的软键盘的位置调整到桌面上的任意一个位置,该如何操作?谢谢!…

查看全部问答>

CE6中的suspend问题

1. Hive-based registry在suspend的时候会调用RegFlushKey    我想知道是那个模块,在那一个具体的步骤中调用的RegFlushKey。 2.按suspend正常过程打印下面了内容   Powering Off system:   Calling GWES power ...…

查看全部问答>

求教用于圆感应同步器数显系统的AD2S80芯片

本人在做圆感应同步器的数显系统,打算用AD2S80芯片,现在看不太明白它与单片机的接口是如何工作的. 哪位弟兄用过改芯片,望不吝赐教.(附件上传了该芯片的说明资料)…

查看全部问答>

一个有趣的小工具,总线直通车,bus pirate

网上看到一个老外做的有趣的小工具,bus pirate,就是利用PC做控制台,通过一个PIC单片机板子,模拟输出各种常用的单片机总线信号,比如I2C,SPI,1WIRE等等,这样就可以对常用的各种总线接口的芯片进行直接操作,不需要利用单片机编程序的麻 ...…

查看全部问答>

疑惑:关于FIR滤波

本帖最后由 dontium 于 2015-1-23 13:37 编辑 我在做fir滤波试验时,如果fir滤波系数放在程序存储器中(coeffs指定其首地址). 例程里有如下滤波语句: firs *AR2+0% , *AR3+0% , coeffs coeffs不是总是指向滤波系数表的第一个吗???哪里有自加啊?它 ...…

查看全部问答>