×
嵌入式开发 > 详情

ARM微处理器ISP升级程序设计与应用

发布时间:2020-07-10 发布时间:
|
在系统中编程,英文简称ISP,即In System Programming,是Lattice半导体公司首先提出来的一种让我们能在产品设计、制造过程中的每个环节,甚至在产品卖给最终用户以后,具有对其器件、电路板或整个电子系统的逻辑和功能随时进行重组或重新编程的技术。

ISP使得MCU、CPLD等不必从目标板中拔出,通过串口或专用下载电缆就可实现本地或远程下载来实现程序升级。

飞利浦的LPC2000系列片内含FLASH的ARM7微处理器支持ISP和IAP(In ApplIcation Programming——在应用编程)。

LPC2000系列微处理器通过其UART0与PC(或其他设备)的COM口联机实现ISP。

复位时,P0.14为低电平会使LPC2000系列微处理器进入ISP功能模式,否则进入正常工作模式。

P0.14在复位后默认初始化为高阻模式,用户需要提供外部硬件条件——上拉或接地,使引脚处于一个确定的状态,否则可能导致功能紊乱——非预期的ISP模式或正常工作模式。

飞利浦提供公用的ISP下载程序,但是在某些情况下,例如为了程序统一性,个性化或固件的保密性,我们有必要设计自己的ISP下载程序。

ISP处理过程

ISP的整个过程如下图所示:

1. ISP模式的进入

复位时P0.14的3ms以上持续的低电平是LPC2000系列微处理器进入ISP功能模式的必要条件。PC的串口应设定为8个数据位、1个停止位和无奇偶校验,波特率建议设置为9600bps,由于受ISP处理速度的影响,过高的波特率并不见得会提高ISP处理速度,反而容易导致ISP处理没有响应。

2. 自动波特率检测

大多数SCI模块硬件不支持自动波特率检测。一般情况下嵌入式控制器的SCI时钟由PLL提供,设计的系统工作会改变PLL复位时的工作状态,这样很难支持自动波特率检测功能。而在TMS320F2812处理器上,增强功能的SCI模块硬件支持自动波特率检测逻辑。寄存器SCIFFCT位ABD和CDC位控制自动波特率逻辑,使能SCIRST位使自动波特率逻辑工作。增加自动波特率检测功能的SCI通信接口除了能够满足正常通信自动检测系统的通信速率外,还支持采用SOl接口上电引导装载程序?这对于通过上位机采用SCI接口实时更新系统软件非常重要。

当CDC为1时,如果ABD也置位表示自动波特率检测开始工作,就会产生SCI发送FIFO中断(TXINT)。同时在中断服务程序中必须使用软件将CDC位清0,否则如果中断服务程序执行完CDC仍然为1,则以后不会产生中断。具体操作步骤如下。

(1)将SCIFFCT中的CDC位(位13)置位,清除ABD位(位15),使能SCI的自动波特率检测模式。

(2)初始化波特率寄存器为1或限制在500 Kb/s内。

(3)允许SCI以期望的波特率从一个主机接收字符“A”或字符“a”。如果第一个字符是“A”或“a”,则说明自动波特率检测硬件已经检测到SCI通信的波特率,然后将ABD位置1。

(4)自动检测硬件将用检测到的波特率的十六进制值刷新波特率寄存器的值,这个刷新逻辑器也会产生一个CPU中断。

(5)通过向SCIFFCT寄存器的ABD CLR位(位13)写入1清除ABD位,响应中断。写0清除CDC位,禁止自动波特率逻辑。

(6)读到接收缓冲为字符“A”或“a”时,清空缓冲和缓冲状态位。

(7)当CDC为1时,如果ABD也置位表示自动波特率检测开始工作,就会产生SCI发送FIFO中断(TXINT),同时在中断服务程序中必须使用软件将CDC位清0。

LPC2000系列微处理器在进入ISP模式之后,会自动进行“自动波特率检测”,因为微处理器并不清楚自己所连接的晶振频率和PC程序所设置的串口波特率。在“自动波特率检测”通过之后,微处理器就进入处理PC程序所发送的ISP命令的状态。

自动波特率检测的流程如下图所示:


PC机先发送一个同步字“?”,若微处理器因为在复位时检测到P0.14为低电平而进入了ISP模式,则微处理器会发送“Synchronized\\”给PC,PC在接收到“Synchronized\\”之后,回发“Synchronized\\”给微处理器,微处理器在收到“Synchronized\\”之后,发送“Synchronized\\OK\\”给PC,PC在收到“Synchronized\\OK\\”之后,以ASCII码的形式发送晶振频率(kHz)给微处理器。例如晶振频率为12MHz,则PC发送给微处理器的字串为“12000\\”。微处理器在接收到晶振频率之后会发送“OK\\”给PC作为响应。

注意事项:

(1) 处理器与PC的数据交换过程中,所有数据均以“\\”作为结尾,十六进制为0x0D,0x0A。

(2) 任何发送或接收出错之后,只能通过PC软件提示“操作失败”,并要求用户重启(复位/开关电源)微处理器来解决。

(3) 所有数字均以ASCII码的形式发送。

3.ISP命令处理

在自动波特率检测之后,PC就可以通过串口发送ISP命令和数据给微处理器了。

ISP命令简介

LPC2000系列微处理器支持的ISP命令如下表所示。

ISP命令简单汇总

ISP命令 功能

U 23130 解锁。在对 FLASH编程、擦除运行之前必须执行该命令。

B 波特率>停止位> 设置波特率。

A 1/0> 回声开关。控制微处理器是否将接收到的数据回发给 PC。

W RAM地址>长度> PC写数据到微处理器RAM。数据格式为UU码。

R RAM地址>长度> PC从微处理器RAM读数据。数据格式为UU码。

P 起始扇区>结束扇区> 选定即将操作的扇区范围。

C FLASH地址>RAM地址>字节数> 命令微处理器将 RAM中的数据烧写到FLASH中。

G 地址>模式> 执行 FLASH或RAM中的代码。

E 起始扇区>结束扇区> 擦除选定的扇区。

I 起始扇区>结束扇区> 检查指定的扇区是否为空。

J 读器件 ID。

K 读 BOOT代码版本号。

M 地址1>地址2>字节数> 比较 FLASH和/或RAM中的数据。

ISP读取器件ID的过程

这里之所以介绍通过ISP读取器件ID的过程,是因为通过ISP命令来烧写程序相对通过ISP读取器件ID来说复杂很多,而且烧写程序之前往往包含读取器件ID部分。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
一只老鸟的嵌入式ARM学习心得