当前位置:首页 > 单片机 > 单片机
[导读]  之前说了stm32的iap编程,今天天气真好,顺手就来说说lpc1788的iap编程(没看前面的请查看stm笔记下的内容)  首先是flash的算法,lpc1768并没有寄存器来让我们操作flash,他内置了iap的flash算法,在技术手册的525页

  之前说了stm32的iap编程,今天天气真好,顺手就来说说lpc1788的iap编程(没看前面的请查看stm笔记下的内容)

  首先是flash的算法,lpc1768并没有寄存器来让我们操作flash,他内置了iap的flash算法,在技术手册的525页有如下说明

  

  其支持的iap命令有这些

这样我们就能够做出相关的flash读写借口呢(具体请查看lpc1768的技术手册)

unsigned param_table[5];//传递参数列表

unsigned result_table[5];//返回结果列表

//调用iap命令

void iap_entry(unsigned param_tab[],unsigned result_tab[])

{

void (*iap)(unsigned [],unsigned []);

iap = (void (*)(unsigned [],unsigned []))IAP_ADDRESS;

iap(param_tab,result_tab);

}

  通过这种手段就能够调用iap命令,我们演示性的看一个命令

//扇区准备好指令

//起始扇区号 结束扇区号 系统时钟

void prepare_sector(unsigned start_sector,unsigned end_sector,unsigned cclk)

{

param_table[0] = PREPARE_SECTOR_FOR_WRITE;

param_table[1] = start_sector;

param_table[2] = end_sector;

param_table[3] = cclk;

iap_entry(param_table,result_table);

}

  该指令在写flash和擦除flash之前必须调用

具体的完整flash代码请查看工程文件,会在文章末尾上传

然后依旧是五个指令

"iap_down"

"iap_jump_app"

"iap_over"

"iap_set_flag"

"iap_clear_flag"

  功能和之前的stm32差不多,但是下载算法变化了,因为stm32支持的写入是每次写入一个十六位数据,而lpc1768每次写入8位数据,而且每次写入数据的量为128/256/512/1024/4096,正好没有我们之前所用的2048,所以算法修改成如下的样子

u8 iapbuf[1024] = {0}; //用于缓存数据的数组

u16 receiveDataCur = 0; //当前iapbuffer中已经填充的数据长度,一次填充满了之后写入flash并清零

u32 addrCur = FLASH_APP1_ADDR; //当前系统写入地址,每次写入之后地址增加2048

#define vu32 volatile unsigned int

//开始下载

void iap_down_s(void)

{

u16 i = 0;

u16 receiveCount;

if(erase_user_flash())

{

printf("errorrn");

return;

}

printf("begin,wait data downloadrn");

receiveMode = 1;//串口进入下载接收数据模式

while(1)

{

//循环接收数据,每次必须要发128个数据下来,如果没有128,说明这是最后一包数据

//接收到一包数据之后,返回一个小数点,发送完成,系统编程完成之后返回一个iap_over

if(serial_Buffer_Length & 0x8000)

{

receiveCount = (u8)(serial_Buffer_Length&0x00ff);

if(receiveCount == 128)//满足一包,填充并查看是否有了1024字节,有了写入闪存

{

for(i = 0; i < receiveCount; i++)

{

iapbuf[receiveDataCur] = serial_Buffer[i];

receiveDataCur++;//完成之后receiveDataCur++;

}

receiveExpectCount = 0;//清除期望接收模式

serial_Buffer_Length = 0;//清除串口满标志

printf(".");//每次接受一次数据打一个点

//此时需要检测receiveDataCur的值,要是放满了,就需要写入

if(receiveDataCur == 1024)

{

//写入flash中

if(write_flash(100000,addrCur,(unsigned*)iapbuf,1024))

{

receiveMode = 0;

addrCur = FLASH_APP1_ADDR;

receiveDataCur = 0;

return;

}

addrCur += 1024;//地址+2048

//写完之后receiveDataCur要清零等待下一次传输

receiveDataCur = 0;

}

else //有可能最后一包有128个数据但是最终没有2048个数据,此时扩展一个指令用于完成最后一个的写入

{

}

//还没放满,等待下一次数据过来

}

else //不满足一包,说明数据传送这是最后一包,写入闪存

{

//没有一包也要传送到缓存中

for(i = 0; i < receiveCount; i++)

{

iapbuf[receiveDataCur] = serial_Buffer[i];

receiveDataCur++;//完成之后receiveDataCur++;

}

receiveExpectCount = 0;//清除期望接收模式

serial_Buffer_Length = 0;//清除串口满标志

printf(".");//每次接受一次数据打一个点

//要将没接收满的数据变成0xff

for(i= receiveDataCur; i < 1024; i++)

{

iapbuf[i] = 0xff;

}

//之后就要将这数据写入到闪存中

if(write_flash(100000,addrCur,(unsigned*)iapbuf,1024))

{

receiveMode = 0;

addrCur = FLASH_APP1_ADDR;

receiveDataCur = 0;

return;

}

//printf("rnwrite addr %x,length %drn",addrCur,receiveDataCur);

//写完之后要把地址恢复到原来的位置

addrCur = FLASH_APP1_ADDR;

receiveDataCur = 0;

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

上位机串口通信是指在上位机(通常是计算机或微控制器)与外部设备之间通过串行通信协议进行数据传输和通信的过程。在串口通信中,数据以位为单位按顺序传送,通常使用一个或两个物理线路(通常是两条线)来实现数据的发送和接收。

关键字: 上位机 串口通信

摘要:以地铁BAS实训系统为研究对象,按照集中管理、分散控制的设计思想,基于Niagara软件平台设计和搭建了一套3层分布式地铁BAS实训系统,分为管理层、控制层、现场层,包含空调送回风和智能照明两个监控子系统。首先建立...

关键字: BAS实训系统 上位机 监控

无论是水厂、污水厂还是供水、排水、污水泵站的运行核心就是控制系统,而控制系统的核心就是以PLC为主体的自动控制系统。关于自控系统的控制方案有很多种,但并不是都有实效。现在,就以水厂中的沉淀池吸泥桁车为例子,讲一讲智慧水务...

关键字: 上位机 现场总线

摘 要 :设计一辆基于单片机的手机可控多功能智能小车,小车与手机采用无线传输技术通信。智能小车主要分为手机 APP、控制器模块、传感器模块、执行器模块以及报警模块五个部分。传感器模块感知外部环境信息并把数据传送至控制器,...

关键字: APP 智能控制 无线监控 传感技术 上位机 报警

这两天看文的人比较少,先来分享一篇非常简单的关于虚拟串口软件的使用的小短文。在编写串口上位机时,需要进行调试。一种方式是与下位机进行通信进行测试;另一种方式是借助虚拟串口软件来进行测试。虚拟串口软件使用演示虚拟串口软件是...

关键字: 上位机 软件 调试

摘 要 :随着汽车保有量的飞速发展,城市交通所面临的拥堵问题倍受人们关注。针对这一问题,提出一种基于 ZigBee 无线网络的智能交通系统。该系统可实时采集道路信息,利用 ZigBee 模块进行信息传输,通过上位机实现...

关键字: 智能交通 Zigbee 无线网络 车流检测 上位机 车载终端

摘要:针对目前市场上存在的一些电磁继电器参数检测仪器的缺点,为了能够精确采集电磁继电器的吸合电压等主要参数,采用ARM技术和上、下位机方法,设计了一款基于ARMCortex-M3芯片STM32F103ZET6单片机控制的...

关键字: STM32 电磁继电器 检测仪 上位机

出品21ic论坛gaoyang9992006网站:bbs.21ic.com做安卓手机APP通常使用高端大气的AndroidStudio,开发语言是Java,该开发IDE就是体积大学习成本高,入手慢,这里给大家推荐一款国产...

关键字: 上位机 BLE蓝牙 软件

摘 要 :针对目前城市道路井盖安全存在的问题,提出一种基于 LoRa 的实时井盖安全监测系统。该系统由井盖状态采集装置与上位机平台两部分组成,井盖状态采集装置由触发器采用LoRa 技术与集中器进行通信,集中器通过 4G...

关键字: 低功耗广域网 LoRa 技术 窨井 安全监测 上位机 远程通信

摘 要:系统设计基于嵌入式ARM11系统以及无线WiFi智能控制房屋终端设备,先对室内的环境数据进行无线网路分布式采集,采用嵌入式WiFi模块实现数据传输,当环境异常时,系统做出响应以改善室内环境,具有TTS语音报警、打...

关键字: 嵌入式 ARM11 Wi-Fi TTS语音报警 一体化步进电机 上位机
关闭
关闭