?在系统中编程,英文简称ISP,即In System Programming,是Lattice半导体公司首先提出来的一种让我们能在产品设计、制造过程中的每个环节,甚至在产品卖给最终用户以后,具有对其器件、电路板或整个电子系统的逻辑和功能随时进行重组或重新编程的技术。bbddvt
ISP使得MCU、CPLD等不必从目标板中拔出,通过串口或专用下载电缆就可实现本地或远程下载来实现程序升级。bbddvt
??飞利浦的LPC2000系列片内含FLASH的ARM7微处理器支持ISP和IAP(In ApplIcation Programming——在应用编程)。bbddvt
??LPC2000系列微处理器通过其UART0与PC(或其他设备)的COM口联机实现ISP。bbddvt
??复位时,P0.14为低电平会使LPC2000系列微处理器进入ISP功能模式,否则进入正常工作模式。bbddvt
??P0.14在复位后默认初始化为高阻模式,用户需要提供外部硬件条件——上拉或接地,使引脚处于一个确定的状态,否则可能导致功能紊乱——非预期的ISP模式或正常工作模式。bbddvt
??飞利浦提供公用的ISP下载程序,但是在某些情况下,例如为了程序统一性,个性化或固件的保密性,我们有必要设计自己的ISP下载程序。 bbddvt
ISP处理过程bbddvt
??ISP的整个过程如下图所示:bbddvt
bbddvt
??PC机先发送一个同步字“?”,若微处理器因为在复位时检测到P0.14为低电平而进入了ISP模式,则微处理器会发送“Synchronized\\r\\n”给PC,PC在接收到“Synchronized\\r\\n”之后,回发“Synchronized\\r\\n”给微处理器,微处理器在收到“Synchronized\\r\\n”之后,发送“Synchronized\\r\\nOK\\r\\n”给PC,PC在收到“Synchronized\\r\\nOK\\r\\n”之后,以ASCII码的形式发送晶振频率(kHz)给微处理器。例如晶振频率为12MHz,则PC发送给微处理器的字串为“12000\\r\\n”。微处理器在接收到晶振频率之后会发送“OK\\r\\n”给PC作为响应。bbddvt
注意事项:bbddvt
??(1) 处理器与PC的数据交换过程中,所有数据均以“\\r\\n”作为结尾,十六进制为0x0D,0x0A。bbddvt
??(2) 任何发送或接收出错之后,只能通过PC软件提示“操作失败”,并要求用户重启(复位/开关电源)微处理器来解决。bbddvt
??(3) 所有数字均以ASCII码的形式发送。bbddvt
3.ISP命令处理bbddvt
??在自动波特率检测之后,PC就可以通过串口发送ISP命令和数据给微处理器了。bbddvt
ISP命令简介bbddvt
??LPC2000系列微处理器支持的ISP命令如下表所示,更详细的介绍参见周立功网站的Y\\/\\?Y1CPG^7`````0````$0```!(”。bbddvt
LPC2000系列微处理器UU编码发送规则bbddvt
??LPC2000系列微处理器规定:bbddvt
1.发送器(通常为PC)以UU编码行的形式发送实际数据,且每个数据包都以 “\\r\\n”结束,所以在UU编码行长度为61字节的时候,发送器实际发送的数据长度为63字节(61个字节UU编码+2字节“\\r\\n”)。bbddvt
2.在发送20个UU编码行之后,应该发送数据校验和。bbddvt
数据校验和即为上次校验和计算之后所有发送的原始数据的和。bbddvt
数据校验和以ASCII码的方式发送,以 “\\r\\n”结束。bbddvt
接收器在收到校验和后与它接收的数据的校验和相比较,如果校验和匹配,接收器就发送“OK\\r\\n”,并等待下一次发送。如果校验和不匹配,接收器就发送“RESEND\\r\\n”。bbddvt
3.在数据发送结束,即使不足20个UU编码行也仍然应该发送数据校验和。bbddvt
由于FLASH的烧写通常是以4096字节为单位的,所以在每发送4096字节之后也必须发送一个数据校验和。(4096字节=91个UU编码行+1个字节=4×20个UU编码行+11UU编码行+1个字节) bbddvt
??所以实际发送4096字节数据的过程如下:bbddvt
????WRITE 63BYTES(1)bbddvt
????WRITE 63BYTES(2)bbddvt
????WRITE 63BYTES(3)bbddvt
????......bbddvt
????WRITE 63BYTES(18)bbddvt
????WRITE 63BYTES(19)bbddvt
????WRITE 63BYTES(20)bbddvt
????WRITE CHECKSUM(已发送900字节)bbddvt
????WRITE 63BYTES(21)bbddvt
????WRITE 63BYTES(22)bbddvt
????WRITE 63BYTES(23)bbddvt
????......bbddvt
????WRITE 63BYTES(38)bbddvt
????WRITE 63BYTES(39)bbddvt
????WRITE 63BYTES(40)bbddvt
????WRITE CHECKSUM(已发送1800字节)bbddvt
????WRITE 63BYTES(41)bbddvt
????WRITE 63BYTES(42)bbddvt
????WRITE 63BYTES(43)bbddvt
????......bbddvt
????WRITE 63BYTES(58)bbddvt
????WRITE 63BYTES(59)bbddvt
????WRITE 63BYTES(60)bbddvt
????WRITE CHECKSUM(已发送2700字节)bbddvt
????WRITE 63BYTES(61)bbddvt
????WRITE 63BYTES(62)bbddvt
????WRITE 63BYTES(63)bbddvt
????......bbddvt
????WRITE 63BYTES(78)bbddvt
????WRITE 63BYTES(79)bbddvt
????WRITE 63BYTES(80)bbddvt
????WRITE CHECKSUM(已发送3600字节)bbddvt
????WRITE 63BYTES(81)bbddvt
????WRITE 63BYTES(82)bbddvt
????WRITE 63BYTES(83)bbddvt
????WRITE 63BYTES(84)bbddvt
????WRITE 63BYTES(85)bbddvt
????WRITE 63BYTES(86)bbddvt
????WRITE 63BYTES(87)bbddvt
????WRITE 63BYTES(88)bbddvt
????WRITE 63BYTES(89)bbddvt
????WRITE 63BYTES(90)bbddvt
????WRITE 63BYTES(91)bbddvt
????WRITE 7 BYTESbbddvt
????WRITE CHECKSUM(已发送4096字节)bbddvt
??注意上面只包含的PC向微处理器写数据的情况,实际上若没关闭“回声”,微处理器会将上面所有数据回发一次,另外还有校验和响应等。bbddvt
LPC2000系列微处理器ISP编程完整过程bbddvt
????WRITE ?bbddvt
????READ?Synchronized\\r\\nbbddvt
????WRITE Synchronized\\r\\nbbddvt
????READ?Synchronized\\r\\nbbddvt
????READ?OK\\r\\nbbddvt
????WRITE 12000\\r\\nbbddvt
????READ?12000\\r\\nbbddvt
????READ?OK\\r\\nbbddvt
????WRITE U 23130\\r\\nbbddvt
????READ?U 23130\\r\\nbbddvt
????READ?0\\r\\nbbddvt
????WRITE P 0 1\\r\\nbbddvt
????READ?P 0 1\\r\\nbbddvt
????READ?0\\r\\nbbddvt
????WRITE E 0 1\\r\\nbbddvt
????READ?E 0 1\\r\\nbbddvt
????READ?0\\r\\nbbddvt
????WRITE W 1073742336 4096\\r\\nbbddvt
????READ?W 1073742336 4096\\r\\nbbddvt
????READ?0\\r\\nbbddvt
????bbddvt
????发送4096字节UU编码后的数据bbddvt
????WRITE P 0 0\\r\\nbbddvt
????READ?P 0 0\\r\\nbbddvt
????READ?0\\r\\nbbddvt
????WRITE C 0 1073742336 4096\\r\\nbbddvt
????READ?C 0 1073742336 4096\\r\\nbbddvt
????READ?0\\r\\nbbddvt
????bbddvt
????发送4096字节UU编码后的数据bbddvt
????WRITE P 0 0\\r\\nbbddvt
????READ?P 0 0\\r\\nbbddvt
????READ?0\\r\\nbbddvt
????WRITE C 4096 1073742336 4096\\r\\nbbddvt
????READ?C 4096 1073742336 4096\\r\\nbbddvt
????READ?0\\r\\nbbddvt
????bbddvt
????发送4096字节UU编码后的数据bbddvt
????WRITE P 1 1\\r\\nbbddvt
????READ?P 1 1\\r\\nbbddvt
????READ?0\\r\\nbbddvt
????WRITE C 8192 1073742336 4096\\r\\nbbddvt
????READ?C 8192 1073742336 4096\\r\\nbbddvt
????READ?0\\r\\nbbddvt
????发送92字节UU编码后的数据bbddvt
????WRITE P 1 1\\r\\nbbddvt
????READ?P 1 1\\r\\nbbddvt
????READ?0\\r\\nbbddvt
????WRITE C 12288 1073742336 4096\\r\\nbbddvt
????READ?C 12288 1073742336 4096\\r\\nbbddvt
????READ?0\\r\\nbbddvt
????实际程序长度12,380字节bbddvt
bbddvt
程序下载:bbddvt
????LPC21XXISP.rar"t_tag">资料:bbddvt
????1.LPC210X Datasheetbbddvt
????2.LPC2000系列ARM Flash存储器系统和编程bbddvt
?????/ArmDsp/ARTICLE/UUCODE.htmbbddvt
阅读(1840) | 评论(0) | 转发(0) |