CC2530F256内部集成一个增强型8051单片机,拥有8 KB SRAM和256 KB内部Flash存储器。内部Flash主要用来保存程序代码和常量数据。由于传统8051代码存储空间寻址范围只有64 KB,CC2530把内部256 KBFlash分成8个bank,每一个bank大小是32 KB,通过寄存器FMA P.MAP[2:0]选择不同的bank映射到代码存储空间,解决了寻址空间受限的问题。
对于OTA客户端,启动代码位于bank0的0x0000~0x0800地址区域,大小为2 KB。其余的254 KB的Flash空间,用来存储当前固件和其他信息。值得注意的是,0x0888~0x088B区域存放了CRC校验信息,0x088C~0x0897区域存放了PREAMBLE,包括镜像大小、制造商ID、镜像类型和镜像版本号信息。另外,bank7最后的14 KB空间(0x7C800~0x7FFFF)用作非易失性(None Volatile,NV)变量区(12 KB)和特定信息保留区(2 KB)。
OTA系统升级方案有两种,分别是片内Flash升级和片外Flash升级。考虑到一般程序固件大小都超过128KB和以后程序功能升级的扩展性,本文采用片外Flash的方案。采用的片外Flash(M25PE20)容量为256 KB,通过SPI总线与CC2530之间传输数据。
先说一下z-stack中对flash的布局。z-stack将256KBflash的最末八个字节作为zigbee中的IEEE地址,当然在这八个字节之后还有16个字节lock bits,这些flash的lock所需要用的,每2kb1page)的flash有1bit的lock位,那么256kb的flash有128个2kb,1page)的flash有1bit的lock位,那么256kb的flash有128个2kb
1 Bank=16pages=32k
地址:0x8000-0xFFFF
每个2530独特的信息:0x7800-7FFF(2k)
特点: 注意事项 写流程 计算FADDR(专用的寄存器) 擦除FLASH方法 code sampe
1. 32-bit programmable 写FLASH时时钟不能停,不能改 设置地址(FADDRH/L) cc2530F256:256k 关中断 #include <iocc2530.h>
2.页擦除(page) 置位 FCTL.WRITE=1 设置擦除面FADDR unsigned char erase_page_num = 3;
3.支持DMA写 不可以进入低功耗模式 写FWDATA,查询FCTL.FULL FADDR=addr>>2(4字节为1字) FADDR=addr>>(11-1) EA=0; while(FCTL&0x80);
4.、芯片擦除 20ms 时钟不要低于16M(使用stack没有问题) FCTL》FULL变低后重复写 FADDRH=(uint8)(FADDR>>8) 设置FCTL.ERASE FADDRH = earse_page_num<<1;
5.写字(4byte)20us LBF:低位优先 检查超时,或者FLASH锁定 FADDRL=(uint8)(FADDR) 等待结束 FCTL |=0x01; while (FCTL &0x80); EA =!;