关于CC2530F256的flash读写问题求助,我把我的开发记录全都发上来了
本人已经花了近4周在弄CC2530F256的flash读写 但还是搞不定。现寄希望于TI社区,望高手解答。万分感谢!
目的:在flash里面写入信息,然后在需要的时候,读出来,发送出去。 数据大小几十字节而已,最大不会超过1个K。
我用的方法和实验记录如下:
预期:在初始化SampleApp_Init时,擦除后写入存在idnumber里面的标签,在每次调用周期发送函数时,读一次flash并存在IDnumber里面,然后发送出去。周期5s。
写入的标签是32个0x10.
1、在第127页写,一直显示的是11个数:2A200000000
2、改在第125页写,提示IDATA overflow 无法发出周期广播
3、 改在第0页写,提示IDATA overflow 无法发出周期广播
4、
A、 #include "hal_flash.h"
定义数组uint8 idbumber[32];
Uint8 Idnumber[16+1];
B、 在void SampleApp_SendPeriodicMessage( void ) //广播发送函数
里面写入//自己添加 加入读flash功能 读第124页
HalFlashRead( (uint8)124,(uint16)0,(uint8 *)IDnumber,(uint16)4 );
C、 在SampleApp_Init()里面加入
//初始化函数
HalFlashInit();
//往flash里面写的时候 用于计数
uint8 i;
//先擦除 才能写 擦除第124页
HalFlashErase( (uint8)124);
// for(i=0;i<100;i++)
// for(j=0;j<100;j++);
//添加往flash里面写idnumber
for(i=0;i<32;i++)
idnumber[i] = 0x10; //编辑要写入的内容
//写在第124页
D、 HalFlashWrite( (uint16)124,(uint8 *)idnumber,(uint16)4 );//第124页 缓存//首地址idnumber 共4个字节
结果:协调器接收显示的是 000000
1、 修改 重新用GenericApp.c函数写入flash函数,在第124页 偏移量20位置写,结果:
成功download,但是组网灯不亮。
2、 修改写的写入的page,再编译,尝试下。24page,offset 20,cnt32
结果:编译调试出现IDATA溢出
3、 在124页写,就不会提示IDATA溢出了。但依旧组网失败。
4、 在串口透传的例程中:
A、
//flash初始化
#include "hal_flash.h"
B、
C、 在SampleApp_Init()里面加入
//初始化函数
HalFlashInit();
// 存放将要写入的标签
uint8 idnumber[32];
//往flash里面写的时候 用于计数
uint8 i;
//先擦除 才能写 擦除第124页
HalFlashErase( (uint8)124);
// for(i=0;i<100;i++)
// for(j=0;j<100;j++);
//添加往flash里面写idnumber
for(i=0;i<32;i++)
idnumber[i] = (uint8) i; //编辑要写入的内容
//写在第124页
HalFlashWrite( (uint16)124,(uint8 *)idnumber,(uint16) 32);//第124页 缓存//首地址idnumber 共32个字节
D、在发送函数里面:
//用于存放读出的的标签
uint8 read_buf[16];
//自己添加 加入读flash功能 读第124页
HalFlashRead( (uint8)124,(uint16)20,(uint8 *)read_buf,(uint16)16 );
结果:可以编译,不能debug
5、 在广播的例程中:以协调器为对象
无法debug
修改成:110页:可以编译下载,调试,无法组网,橙色组网灯不亮
修改成:17页:可以编译下载,调试的时候,无法成功启动,LED2黄色灯一直在闪。
修改成:17页:可以编译下载,调试的时候,IDATA溢出
修改成:33页:可以编译下载,调试的时候,无法组网, 橙色组网灯不亮
修改成:34页:可以编译下载,调试的时候,无法组网,LED2黄色灯一直在闪。
修改成:66页:可以编译下载,调试的时候,无法组网,橙色组网灯不亮
修改成:66页,不擦除直接写之后读:可以编译下载,调试的时候,无法组网,橙色组网灯不亮
修改成:66页,有擦除,偏移量改为0:可以编译下载,调试的时候,无法组网,橙色组网灯不亮
修改成:98页,有擦除,偏移量改为0:可以编译下载,调试的时候,无法组网,橙色组网灯不亮
修改成:98页,有擦除,读出偏移量改为20,写入64个字符:
可以编译下载,调试的时候,无法组网,LED2黄色灯一直在闪。
修改成:98页,有擦除,写入64个字符,读出偏移量改为20,读出32字节:
可以编译下载,调试的时候,无法组网,LED2黄色灯一直在闪。
修改成:124页,有擦除,写入64个字符,读出偏移量改为20,读出32字节:
可以编译下载,调试的时候,无法组网,LED2黄色灯一直在闪。
修改成:120页,有擦除,写入64个字符,读出偏移量改为20,读出32字节:
可以编译下载,调试的时候,无法组网,LED2黄色灯一直在闪。
修改成:122页,有擦除,写入64个字符,读出偏移量改为20,读出32字节:
可以编译下载,调试的时候,无法组网,LED2黄色灯一直在闪。
尝试直接在代码区写标签:
//尝试直接加在代码区
uint8 buf_id[32];
uint8 i;
for(i=0;i<32;i++)
buf_id[i] = (uint8) i ;
成功组网。
6、 直接在代码区写 可以发送32字节,而且不是预期的0~1F 而是0~F接着还是0~F
7、 直接在代码区写,发送48字节时,只发送了46个,前32个正常,后面的会有部分乱码
发送46个时只发送了44个,前32个正常,后面的会有部分乱码
直接写在代码里面开辟的数组肯定是满足不了项目要求,只是不得以的尝试下。
我上面的flash读写是哪里出问题了?是不是少了那个步骤,或者,只是写的位置不对?还是我的思路完全错了,需要用其他方法?
求解答,万分感谢。
不要把数据写在代码区和NV区,没法组网的原因估计是你的FLash读写,破外了NV里面保存的网络信息数据。
0x3C800~0x3F7FFF是NV区域
很感谢你的回复!
我写的时候,有避开NV区的,我只是想写在代码区之外空白的页(32页到124页)。 但是写了之后 情况记录如上。
0x3C800 B 即242KB 就是在第121页。我之前在33页到120页写 都是无法组网。
反而在代码里面直接开辟一个数组储存,倒是可以组网,但这边不是我要的。
请问你自己在flash写过没有?你是怎么写的呢?麻烦指点迷津
我的问题还是一直解决不了,希望得到您进一步的回复。谢谢。
你现在在用的协议栈是哪一个?我发我的Samplecode给你
写Flash操作方式协议栈里面都有,就像写NV一样的去写,去读就可以了
谢谢你的热心回复。
我用的是
Version 2.3.0-1.4.0
January 17, 2010
我很不解为什么我那样写是不对的。难道flash写和擦除操作只能是硬件仿真时在debug but not download 状态下完成?我每次下载并调试,结果都失败了。
很感谢你愿意发代码给我。
麻烦发我邮箱:371866047@qq.com