| 存储器
问:C 8051F系列单片机的片内FLASH可用于非易失数据存储,但FLASH的寿命是多少呢?
答:FLASH的擦/写次数:保证20,000次擦/写,典型值为:100,000次。
问:片内flash擦除及写入过程及所需时间?
答:片内flash擦除及写入的时序由芯片内自动控制,当发出擦除或写入指令时,CPU暂时停止工作,外围设备(串行口、ADC、Timer等仍处于活动状态),外围设备产生的中断此时被挂起,中断在擦除或写入完成后按优先级顺序执行。以F020为例,扇区(512字节)擦除时间为10m~14ms;典型值12ms,写入时间 50μS。
问:C8051F020的ALE引脚是否象传统51那样上电工作后一直有脉冲输出呢?
答:外部存储器接口(EMIF)信号(ALE,/RD,/WR,地址和数据线) 只有在执行对片外的SRAM的操作指令MOVX时才被激活。在其他时刻,这些信号的状态是由相对应的端口锁存器的内容支配。
问:用程序代码写Flash的注意事项有那些?
答:下面以C8051F020为例进行说明
第一步、禁止中断
第二步、置位FLWE(FLSCL.0),以允许由用户软件写/擦除FLASH
第三步、置位PSEE(PSCTL.1),以允许FLASH扇区擦除
第四步、置位PSWE(PSCTL.0),以允许FLASH写
第五步、用MOVX指令向待擦除扇区内的任何一个地址写入一个数据字节
第六步、清除PSEE以禁止FLASH扇区擦除
第七步、用MOVX指令向刚擦除的扇区中所希望的地址写入数据字节。重复该步直到所有字节都已写入(目标扇区内)
第八步、清除PSWE以禁止FLASH写,使MOVX操作指向XRAM数据空间
第九步、重新允许中断
另外还要特别注意:第一,将VDD Monitor使能是至关重要的,因为这样会防止在电源电压低于2.7V时代码对FLASH进行操作。第二,在调试时,不可以在代码对FLASH进行操作的程序段设置断点、单步、运行到光标等。
具体的例子代码,您可以参考应用笔记AN029 《从应用代码写FLASH 》,应用笔记可以从新华龙公司网站下载。www.xhl.com.cn
问:片内扩展的SRAM如何访问和如何寻址?
答:以C8051F005为例,片内2K SRAM,其地址空间为0x0000-0x07ff。可以用MOVX指令访问,
如:MOV DPTR,#0000H; OPTR指向SRAM地址
MOVX A@DPTR 读字节到A
另外,对于任何寻址方式,16位外部数字存贮器的地址的高5位是被“忽略”的。因此这2K的片内SRAM以取模的方式映射到整个64K外部数据存贮器地址范围。例如,位于地址0x0000,0x0800,0x1000,0x1800,0x2000等地址的数据是一样的。在进行循环连续存贮器填充时这是一个很有用的特性。因为到达SRAM的边界时不必对地址指针复位。
问:如何对程序代码加密(或如何写FLASH程序存储器安全字节)?
答:程序存储器安全字节的地址:64K_0xFDFE和0xFDFF;32K_0x7DFE和0x7DFF;16K_0x3DFE和0x3DFF;8K_0x1DFE和0x1DFF。
您可在你原有的IDE工程里面追加一个汇编文件,一起编译连接下载;以8K Flash芯片为例,汇编文件内容如下:
org 1dfeh
nop
nop
end
或用更改hex格式文件的形式将0x1dfe和0x1dff写入00,此方法适用于批量生产,直接下载hex格式文件。以32K为例:在hex文件倒数第一行与倒数第二行之间插入一个记录: 027DFE00000083 *
注:为hex文件的记录开始符,
02 是要写入的字节数
7DFE 为写入地址的首地址
00 为写入的数据的类型(00为数据;01为hex文件结束标志)
0000 是写入的两个数据
83 是校验和(将它的值与记录中所有字节相加,其结果为0)
|