请问下,如何读写cc2530内部flash的不同 bank 啊?
本人用的是内部flash 256k的那种,
默认的是读写bank0吧,用的是z-stack里的函数
HalFlashErase(127);
while( FCTL & 0x80 );
HalFlashWrite(0xfe00, write_buffer, buffer_size);
HalFlashRead(127, 0, read_buffer, buffer_size);
这样单独一个工程是可以的,因为本身生成的烧写程序小,但是如果工程大,
生成的烧写程序也大,这样就会擦除了代码的部分,程序也就死掉了,
不知道是不是我用的bank切换的不对, 用了FMAP进行映射 比如FMAP=7读写最后的部分,
程序还是会跑飞,
求指教下,谢谢
Page 125 126 127这三页 不要用。
怎么了,这三页,另外,我想的是切换到别的bank,比如从bank0切换到bank7,切换bank后程序就死了.....知道咋回事不
另外,我在bank0里面,读写127页,没有问题啊
Page 127就已经是bank7了
读写的时候不需要先用FMAP进行映射,而是直接进行读写吗,
闪存写的序列算法如下:
1. 设置FADDRH:FADDRL 为起始地址(这是18 位字节地址的16 MSB)。
2. 设置FCTL.WRITE 为1。这启动写序列状态机制。
3. 在20us 内写四次到FWDATA(因为如果不首先反复,最后一次FCTL.FULL 变为0)。LSB 首先写入(最
后一个字节后FCTL.FULL 变为高)。
4. 等待直到FCTL.FULL 变为低(闪存控制器已经开始编程4 步骤3 写入的字节,并准备好缓冲下4 个字节)。
5. 可选的状态检查步骤:
如果步骤3 中的4 字节写入不够快,操作超时,这一步的FCTL.BUSY(和FCTL.WRITE)是0。
如果由于页面被锁不能写入4 字节到闪存,FCTL.BUSY(和FCTL.WRITE)是0,FCTL.ABORT 是1。
6. 如果这是最后4 字节,就退出,否则返回步骤3。
写入操作可以使用以下两种方式之一执行:
● 使用DMA 传输(首选方法)
● 使用CPU,运行来自SRAM 的代码
闪存写操作正在进行的时候,CPU不能访问闪存,即读取程序代码。因此执行闪存写的程序代码必须从RAM
执行。
感觉好复杂的样子
我用的就是z-stack里的函数,用的是dma的方式,但是,现在是我不知道怎么读写特定的bank,我的程序有点大,bank0是完全被沾满了,我如果直接用flash擦写就会擦掉代码的部分,程序就会跑死,如果是单独的flash读写工程,因为代码少,那么用同样的方法读写flash都是正确的,现在问题的关键是如何操作bank,或者怎么在bank间切换
DMA写 不需要手动切换BANK吧,DMA会自己映射过去访问
你好,请问我直接用里面的flash读写函数
HalFlashWrite(0x8400, "abcd", 1);
HalFlashRead(66, 0, FlashTempValue, FlashValueNum);
但用串口打印不出来东西,是我哪里出错了,是DMA需要设置吗,还是我的读写地址错了,麻烦能帮我分析下吗,搞了好几天都没弄好,急求!
请问你这个问题解决了吗?我也遇到这种问题,能不能指导一下?