TIMAC 开发随笔 一 : CC2530的flash在线读写
TIMAC 开发随笔 一 : CC2530的Flash在线读写?????????引用请注明出处!!我的邮箱qinxiaoyu@163.com ?????? 身处安全设备行业,人员的位置信息是非常重要的。所以,定位设备是解决这类需求的根本。 ? ? ?? 定位设备有很多种了。地面,可以使用GPS实现定位,误差在1米以内应该是比较容易做到的。但是要是在井下,恐怕卫星信号就很难直达地底了。所以人们就想到了各种定位设备。我现在的公司以前就在做这种设备了,他们使用CEL的ZICM2410模块就解决了这种需求。ZICM2410模块集成了硬连线的MAC层,所以,可以实现CSMA。降低数据的丢包率。 ?????? 现在,公司打算使用更廉价的CC2530芯片来做原来的方案。于是,我们要接触TIMAC的东西了。 ?????? TI公司提供了一系列的解决方案,最简单的电灯程序,点对点发送数据的程序,TIMAC,SimpliciTI Compliant Protocol Stack,ZStack等。 ??????? 我使用了TIMAC来实现原来的方案,其实就是看中了他的CSMA机制,和它的易用性。 ?????? 好了,有了前因,我就说说我本章想说的东西,TIMAC的Flash读写的实现。 ?????? 由于TIMAC已经实现了HAL层,所以!我们也不想做再造轮子的事情了,直接使用就可以了。这里为了方便,我们还是移植了ZStack的OSAL_Nv.c和OSAL_Nv.h过来。 ???????安装ZStack软件包,在安装目录下面直接搜索OSAL_Nv找到.c和.h文件。OSAL_Nv.c复制到Componentsosalcommon下面,OSAL_Nv.h复制到Componentsosalinclude。在IAR IDE的工程文件Application下add files OSAL_Nv.c。这样就算是把OSAL_Nv导入到工程里了。 ??????? 分析一下OSAL_Nv.c: ?????????????从这些定义就可以知道: ? ? ? ? ? ?? #define HAL_FLASH_PAGE_SIZE???????2048?????????????? 每个page有2k的大小 ????????????? 第一步:初始化NV ????????????????????在msa_Main.c的main函数中添加? osal_nv_init(NULL); 如下: int main(void) { /* Initialize hardware */ HAL_BOARD_INIT(); /* Initialze the HAL driver */ HalDriverInit(); /* Initialize NV System */ osal_nv_init(NULL); /* Initialize MAC */ MAC_Init(); /* Initialize the operating system */ osal_init_system(); /* Enable interrupts */ HAL_ENABLE_INTERRUPTS(); /* Setup Keyboard callback */ HalKeyConfig(MSA_KEY_INT_ENABLED,MSA_Main_KeyCallback); /* Blink LED on startup */ HalLedBlink (HAL_LED_4,40,200); /* Start OSAL */ OSAL_START_SYSTEM(); return 0; } ????????????? 第二步:定义必要参数 #define APP_BUSINESS_NV_LEN 10 #define APP_BUSSINESS_NV_ID 0x0001 //这里一定要小于0x0006 ???????????????????????第三步:初始化id
??????????????????????第四步:写Flash uint8 APP_BUSINESS_DEFAULT_DATA[10] ="111156789X"; DEBUG_APP_BU("APP::AppBusinessSetDefaultNvrn"); osal_nv_write( APP_BUSSINESS_NV_ID,APP_BUSINESS_NV_LEN,&APP_BUSINESS_DEFAULT_DATA); ????????????????????????????? 将数据APP_BUSINESS_DEFAULT_DATA中的111156789X写入到APP_BUSSINESS_NV_ID,偏移量为0的地址去,长度为APP_BUSINESS_NV_LEN ????????????? 第五步:读Flash void AppBusinessReadFlashData(void) { uint8 APP_BUSINESS_DEFAULT_DATA_temp[10] ="0000000000"; DEBUG_APP_BU("APP::AppBusinessReadDefaultDatarn"); if(!(osal_nv_read(APP_BUSSINESS_NV_ID,&APP_BUSINESS_DEFAULT_DATA_temp))) { DEBUG_APP_BU_TYPE("%c",APP_BUSINESS_DEFAULT_DATA_temp,APP_BUSINESS_NV_LEN); } DEBUG_APP_BU("rn"); } ??????????? ????????????????从PP_BUSINESS_DEFAULT_DATA位置开始,偏移量为0的位置开始读取数据,读取长度为APP_BUSINESS_NV_LEN,数据保存在APP_BUSINESS_DEFAULT_DATA_temp中。 ?????? 在按键响应的地方,或者其他的地方调用写Flash的代码,然后再调用读Flash的代码,就可以将数据保存在flash中了。关机后再次开机,直接调用读flash的代码,发现debug出的数据正是"111156789X"。在此,flash的读写就算是写完了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |