历史上的今天
返回首页

历史上的今天

今天是: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中。



推荐阅读

史海拾趣

ABB Group公司的发展小趣事

ABB Group是一家全球性的工程技术公司,提供电力和自动化技术解决方案。以下是该公司发展的五个相关故事:

  1. 公司成立和早期发展: ABB Group的前身可以追溯到1883年,当时由瑞士的Brown, Boveri & Cie (BBC)和瑞典的ASEA公司合并成立。这个合并创造了一个跨国电气工程公司,专注于发电机、电气传动和电力系统的设计和制造。该公司成立后迅速扩展了国际业务,并在世界各地建立了分支机构和生产基地。

  2. 技术创新和产品多样化: ABB Group一直致力于技术创新,并不断推出新产品和解决方案,以满足客户的需求。公司在电力输送、工业自动化、机器人技术等领域拥有丰富的经验和专业知识,为各种行业提供了全面的电力和自动化解决方案。

  3. 国际化战略和全球扩张: ABB Group通过收购、合并和战略合作,加速了在全球范围内的扩张。公司在100多个国家设有分支机构和办事处,形成了覆盖全球的销售和服务网络。这种国际化战略使ABB能够更好地满足不同国家和地区客户的需求。

  4. 可持续发展和环保责任: ABB Group致力于推动可持续发展和环保责任,在产品设计、生产和运营过程中注重减少能源消耗和减排。公司积极推动清洁能源和智能电网的发展,为全球的环境保护和可持续发展做出贡献。

  5. 未来展望和发展方向: ABB Group将继续致力于技术创新和市场拓展,加强在电力和自动化领域的领先地位。公司将加大在数字化技术和人工智能领域的投入,推动工业智能化和数字化转型,为客户提供更智能、更高效的解决方案。

DLG Hanbit公司的发展小趣事

随着环保意识的提高,DLG Hanbit公司开始注重环保和可持续发展。公司引进了一系列环保设备和技术,减少了生产过程中的污染物排放。同时,公司还积极推广绿色电子产品,帮助客户实现节能减排。这种环保理念不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

Hmc Inc公司的发展小趣事

“Global Memory Tech”公司在HMC技术的研发过程中,深刻认识到国际合作的重要性。该公司积极与全球各地的科研机构、高校和行业标准组织合作,共同推动HMC技术的标准化进程。通过不懈努力,Global Memory Tech成功推动了HMC相关标准的制定,为HMC技术的广泛应用奠定了坚实基础。同时,该公司还通过技术授权和合作生产的方式,与多家国际企业建立了紧密的合作关系。

ELECTRONIC ASSEMBLY公司的发展小趣事

在竞争激烈的电子组装市场中,一家名为“精准电子组装”的公司凭借其精准的市场定位脱颖而出。公司深入研究行业趋势和客户需求,准确把握市场脉搏,专注于为高端客户提供定制化的电子组装服务。通过不断挖掘客户需求、提升服务水平,精准电子组装在高端市场上占据了一席之地,实现了快速发展。

振华新云(CEC)公司的发展小趣事

背景:1966年,在贵州凯里白午山区,国营新云器材厂(后更名为振华新云)正式成立,标志着公司的诞生。

内容:成立初期,公司面临着技术落后、设备陈旧等困难。然而,在老一辈员工的艰苦奋斗下,公司逐渐摸索出适合自身的发展道路。通过引进新技术、优化生产流程,不断提高产品质量和生产效率。

成果:经过几年的努力,振华新云逐渐在电子元器件行业崭露头角,为后续的快速发展奠定了坚实基础。

Antiference公司的发展小趣事

在追求经济效益的同时,Antiference公司始终不忘履行社会责任。公司积极参与环保事业,推动绿色生产,努力降低生产过程中的能耗和排放。此外,Antiference还积极投身公益事业,支持教育事业和扶贫工作,为社会做出了积极贡献。

问答坊 | AI 解惑

大家觉得搞单片机(嵌入式电子技术开发)累吗???

大家觉得搞单片机(嵌入式电子技术开发)累吗??? http://bbs.21ic.com/viewthread.php?tid=127427…

查看全部问答>

定时器产生的中断请求,如何获取来响应自己的程序呢?

定时器产生的中断请求,如何获取来响应自己的程序呢? 我想利用定时器在指定的时间到达时,执行我写的一段程序,怎么获取定时器的这个中断呢? 有例程最好,我不知道这个过程如何写,是不是中断有一个固定的模式?? 新手求指教啊~~~~…

查看全部问答>

PSDSoft Express软件生成的编程文件obj格式解析

各位好:     最近用到PSDSoft Express软件,其生成的编程文件obj中,包含:PLD映射,SRAM数据,EPROM数据,不知如何划分!因为编程PSD501芯片要用到这个文件.    另外,发现此软件生成的项目中,在生成obj文件之前,会自动 ...…

查看全部问答>

谁能给我讲下SPI总线是如何识别相同设备优先级的?

就是在一个SPI总线上我有两个一样的IC,A,B;现在SPI总线是如何识别他们两个呢?怎样确定他们的优先级呢?比如说要把A的那个信号切换到什么状态的方法? 请高手指教!…

查看全部问答>

为什么Eboot阶段的功耗大于wince运行阶段

首先介绍一下我的系统:PXA270 + wince5.0 系统启动过程,上电 --> eboot将wince5.0镜像从flash 搬运到RAM中, -->跳转到RAM运行 现象:用4.2V给系统供电,正极串入电流表,在eboot阶段的电流为300mA左右,跳转到wince5.0后,功耗降到220mA,在bo ...…

查看全部问答>

求助:NiosII的模拟I2C控制没有应答

使用NiosII控制高频头CU1216,在NiosII IDE中运行下列程序后,由于没有应答,程序死在Write_I2C_Byte函数的while(I2C_Ackn() );,reset,sda,scl均加了上拉电阻,进行了一些检查均没有结果 ,哪位高手能帮我指点迷津?谢谢。 #include \"i2c.h\" ...…

查看全部问答>

6.07【每日一问】return是函数吗?

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 编辑 ]…

查看全部问答>