历史上的今天
今天是:2024年12月11日(星期三)
2018年12月11日 | LPC2378的IAP读写编程
2018-12-11 来源:eefocus
通过 IAP,用户可以使用片内Flash 作为非易失性数据存储器,存储一些设备的配置信息。这样不仅可以节约成本,而且还可以减小线路板的面积。
利用IAP 将Flash 作为数据存储器时,用户需要控制自身代码量的大小及代码定位。绝对不能够出现Flash 数据区和Flash 代码区重叠的现象。因为在利用IAP 向片内Flash 存储器写入数据时,需要对数据扇区进行擦除。如果数据区和代码区重合,就有可能会破坏系统的代码空间,造成系统死机或崩溃。
一、编程片内Flash 的步骤
使用 IAP 函数对片内Flash 执行编程操作时,需要按以下步骤进行操作。

(1)确定参数
在使用 IAP 代码之前,需要定义一些常量,如系统时钟、IAP 函数入口、IAP 入口缓冲区和出口缓冲区等。
(2)选择扇区
对某一个扇区执行擦除、写入等操作之前,必须先选择该扇区。但也可以一次选择多个扇区。
(3)擦除扇区
同其它的 Flash 芯片一样,LPC2300 的片内Flash 在写入数据前也需要执行擦除操作。
不过这一步是可选的。如果目标区域已经被擦除了,那么就不必重复擦除,直接写入数据即可。擦除操作一次可以擦除多个扇区。
(4)编程Flash
以上几步执行完毕后,就可以编程Flash 了。执行编程扇区的操作时,IAP 函数会将RAM中的数据拷贝到Flash 中,此时有几个限制:
1.Flash 的目标地址必须是256 字节对齐,即目标地址[7:0]为0,如下图所示;
2.RAM 数据区的源地址必须字对齐,即起始地址[1:0]为0,如下图所示;
3.源数据区必须是局部总线上的 SRAM,不能使用通用USB SRAM 和以太网SRAM;
4.一次写入的字节数固定:256、512、1024 或者4096。

(5)校验数据
IAP 代码还为用户提供了一个数据校验的手段,这样用户就可以不必自己动手来校验写入Flash 中的数据是否正确。用户需要提供目标地址、源地址和比较字节的个数。注意:源地址、目的地址和比较字节的个数都必须是字对齐。
二、程序主体
在这个程序中,我们向扇区7 写入512 个字节的数据。
主程序代码
#define DestAddr 0x00007000 // 扇区7 的起始地址
/******************************************************************************************
** 函数名称:main
** 函数功能:数据存储解决方案。
******************************************************************************************/
int main (void)
{
__align(4) uint8 SendData[512]; // 定义变量区
uint32 i;
for(i = 0; i < 512; i++) // 初始化变量区数据
{
SendData[i] = i;
}
SelSector(7, 7); // 选择扇区
EraseSector(7,7); // 擦除扇区
SelSector(7, 7); // 选择扇区
RamToFlash(DestAddr, (uint32)SendData, 512); // 写数据到FLASH
while(1);
return 0;
}
三、IAP读操作
很多资料只有写,没有读操作。写Flash必须用IAP命令,从Flash中读取数据不需要使用IAP命令,直接通过指针读Flash绝对地址里的数据即可。
volatile const unsigned char *pucdata;
unsigned char ucData = 0;
pucdata = (volatile unsigned int *) 0x00000254;
ucData = * pucdata;
通过以上语句即可将0x00000254地址的数据读取到变量ucData中。
史海拾趣
|
大家觉得搞单片机(嵌入式电子技术开发)累吗??? http://bbs.21ic.com/viewthread.php?tid=127427… 查看全部问答> |
|
定时器产生的中断请求,如何获取来响应自己的程序呢? 我想利用定时器在指定的时间到达时,执行我写的一段程序,怎么获取定时器的这个中断呢? 有例程最好,我不知道这个过程如何写,是不是中断有一个固定的模式?? 新手求指教啊~~~~… 查看全部问答> |
|
PSDSoft Express软件生成的编程文件obj格式解析 各位好: 最近用到PSDSoft Express软件,其生成的编程文件obj中,包含:PLD映射,SRAM数据,EPROM数据,不知如何划分!因为编程PSD501芯片要用到这个文件. 另外,发现此软件生成的项目中,在生成obj文件之前,会自动 ...… 查看全部问答> |
|
就是在一个SPI总线上我有两个一样的IC,A,B;现在SPI总线是如何识别他们两个呢?怎样确定他们的优先级呢?比如说要把A的那个信号切换到什么状态的方法? 请高手指教!… 查看全部问答> |
|
首先介绍一下我的系统:PXA270 + wince5.0 系统启动过程,上电 --> eboot将wince5.0镜像从flash 搬运到RAM中, -->跳转到RAM运行 现象:用4.2V给系统供电,正极串入电流表,在eboot阶段的电流为300mA左右,跳转到wince5.0后,功耗降到220mA,在bo ...… 查看全部问答> |
|
使用NiosII控制高频头CU1216,在NiosII IDE中运行下列程序后,由于没有应答,程序死在Write_I2C_Byte函数的while(I2C_Ackn() );,reset,sda,scl均加了上拉电阻,进行了一些检查均没有结果 ,哪位高手能帮我指点迷津?谢谢。 #include \"i2c.h\" ...… 查看全部问答> |
|
return 大家都不陌生吧,我想每个人写的第一个程序基本都差不多,就是helllo world,就是现在,我在验证平台的时候还是会用hello world,但是大家不知道有没有关注return,它是函数吗?这些细节问题在公司的笔试面试最容易考你了!~#incude <stdi ...… 查看全部问答> |
|
我最近在设计一个正弦波发生器的过程中,出现了很诡异的问题。频率稍微上调多点,输出波形就截止。采取fpga的de0开发板,方案如下:1. 频率处理以及显示(元件1) ——> 输出整形(integer)频率 f2. 输入频率 —— ...… 查看全部问答> |
|
在天涯闲逛的时候看到有人发了一篇工程师怎么面试的文章,写的挺对路的,并且从职业规划、简历撰写、面前准备、面试礼仪和逻辑思维什么的各方面都有涉猎,还算全面,挪来给大家观摩下。 这两天有个涯友私信我说想找半导体行业的工程师的工作,问我 ...… 查看全部问答> |
|
说下目的吧,从J3输入交流电,通过控制MOS管的通断,来实现控制输出时的电流的大小。请教下这样设计有问题么?还有请教下R13和C12的作用是干嘛的。图不清楚的可以看下附件的PDF格式的。 [ 本帖最后由 cat3902982 于 2013-6-7 09:03 编辑 ]… 查看全部问答> |




