微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 关于CC2530F256的flash读写问题求助,我把我的开发记录全都发上来了

关于CC2530F256的flash读写问题求助,我把我的开发记录全都发上来了

时间:10-02 整理:3721RD 点击:

本人已经花了近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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top