您好,欢迎访问三七文档
在系统中编程,英文简称ISP,即InSystemProgramming,是Lattice半导体公司首先提出来的一种让我们能在产品设计、制造过程中的每个环节,甚至在产品卖给最终用户以后,具有对其器件、电路板或整个电子系统的逻辑和功能随时进行重组或重新编程的技术。ISP使得MCU、CPLD等不必从目标板中拔出,通过串口或专用下载电缆就可实现本地或远程下载来实现程序升级。LPC2000系列片内含FLASH的ARM7微处理器支持ISP和IAP(InApplIcationProgramming——在应用编程)。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.自动波特率检测LPC2000系列微处理器在进入ISP模式之后,会自动进行“自动波特率检测”,因为微处理器并不清楚自己所连接的晶振频率和PC程序所设置的串口波特率。在“自动波特率检测”通过之后,微处理器就进入处理PC程序所发送的ISP命令的状态。自动波特率检测的流程如下图所示: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作为响应。注意事项:(1)处理器与PC的数据交换过程中,所有数据均以“\\r\\n”作为结尾,十六进制为0x0D,0x0A。(2)任何发送或接收出错之后,只能通过PC软件提示“操作失败”,并要求用户重启(复位/开关电源)微处理器来解决。(3)所有数字均以ASCII码的形式发送。3.ISP命令处理在自动波特率检测之后,PC就可以通过串口发送ISP命令和数据给微处理器了。ISP命令简介LPC2000系列微处理器支持的ISP命令如下表所示,更详细的介绍参见周立功网站的以及《ARM微控制器基础与实战》一书。ISP命令简单汇总ISP命令功能U23130解锁。在对FLASH编程、擦除运行之前必须执行该命令。B波特率停止位设置波特率。A1/0回声开关。控制微处理器是否将接收到的数据回发给PC。W长度PC写数据到微处理器RAM。数据格式为UU码。R长度PC从微处理器RAM读数据。数据格式为UU码。P起始扇区结束扇区选定即将操作的扇区范围。C字节数命令微处理器将RAM中的数据烧写到FLASH中。G地址模式执行FLASH或RAM中的代码。E起始扇区结束扇区擦除选定的扇区。I起始扇区结束扇区检查指定的扇区是否为空。J读器件ID。K读BOOT代码版本号。M地址1地址2字节数比较FLASH和/或RAM中的数据。注意事项:(1)处理器与PC的数据交换过程中,所有数据均以“\\r\\n”作为结尾,十六进制为0x0D,0x0A。(2)任何发送或接收出错之后,只能通过PC软件提示“操作失败”,并要求用户重启(复位/开关电源)微处理器来解决。(3)所有数字均以ASCII码的形式发送。(4)所有参数均以空格作为分隔符,十六进制为0x20。ISP命令的响应在执行ISP命令之后,微处理器会发送“0\\r\\n”之类的字串给PC作为响应。这里的“0”即为执行结果。“0”表示执行结果正确,非“0”表示执行失败,至于非“0”的具体的含义,参见周立功网站的以及《ARM微控制器基础与实战》一书。ISP读取器件ID的过程这里之所以介绍通过ISP读取器件ID的过程,是因为通过ISP命令来烧写程序相对通过ISP读取器件ID来说复杂很多,而且烧写程序之前往往包含读取器件ID部分。下面为对ISP2106读器件ID的完整的过程:OPENCOMbps:9600,StopBits:1,Parity:No,DataBits:8WRITE0x3F?READ0x530x790x6E0x630x680x720x6F0x6E0x690x7A0x650x640x0D0x0ASynchronized\\r\\nWRITE0x530x790x6E0x630x680x720x6F0x6E0x690x7A0x650x640x0D0x0ASynchronized\\r\\nREAD0x530x790x6E0x630x680x720x6F0x6E0x690x7A0x650x640x0D0x0A0x4F0x4B0x0D0x0ASynchronized\\r\\nOK\\r\\nWRITE0x310x320x300x300x300x0D0x0A12000\\r\\nREAD0x310x320x300x300x300x0D0x0A0x4F0x4B0x0D0x0A12000\\r\\nOK\\r\\nWRITE0x550x200x320x330x310x330x300x0D0x0AU23130\\r\\nREAD0x550x200x320x330x310x330x300x0D0x0A0x300x0D0x0AU23130\\r\\n0\\r\\nWRITE0x4A0x0D0x0AJ\\r\\nREAD0x4A0x0D0x0A0x300x0D0x0AJ\\r\\n0\\r\\nREAD0x340x320x390x330x390x380x340x300x350x300x0D0x0A4293984050其中WRITE和READ是针对PC而言的。UU编码简介向FLASH中烧写的程序代码是通过UU编码之后传给微处理器的。UU编码算法将3字节二进制数据转换成4字节可打印的ASCII字符集。因为Hex格式是将1字节二进制数据转换成2字节ASCII数据,所以UU编码的效率高于Hex格式。UU编码的编码方法如下:因为3字节二进制数据共24Bits,把它们按6Bits分成4份,这样就变成了4个字节,再把新生成的4个字节每个都加上0x20,若这样处理后的数值为0x20,则用0x60取代。用C语言表示的UU编码过程如下:#defineENCODE_BYTE(b)(((b)==0)?0x60:((b)+0x20))outbuf[0]=ENCODE_BYTE((inbytep[0]&0xFC)2);outbuf[1]=ENCODE_BYTE(((inbytep[0]&0x03)4)+((inbytep[1]&0xF0)4));outbuf[2]=ENCODE_BYTE(((inbytep[1]&0x0F)2)+((inbytep[2]&0xC0)6));outbuf[3]=ENCODE_BYTE(inbytep[2]&0x3F);若原数据字节数不是3的倍数,则以0x00填充。数据通过UU编码之后,以UU编码行的形式打包发送。UU编码行的第一个字节表示数据的长度,且为UU编码。UU编码规定:任何UU编码行的长度都不应超过61个字节(字符),也就是说,一个UU编码最多可以包含45字节原始的二进制数据。例如,对一个用十六进制表示的数据“18F09FE518F09FE518F09FE518F09FE5”,(注意该数据实际长度为16字节,因为显示的问题,这里采用HEX表示。)在经过UU编码之后,数据变为“M&/?Y1CPG^48\\)_E&/?Y1CPG^6`7RY\\/\\?Y1CPG^7`````0````$0```!(”。LPC2000系列微处理器UU编码发送规则LPC2000系列微处理器规定:1.发送器(通常为PC)以UU编码行的形式发送实际数据,且每个数据包都以“\\r\\n”结束,所以在UU编码行长度为61字节的时候,发送器实际发送的数据长度为63字节(61个字节UU编码+2字节“\\r\\n”)。2.在发送20个UU编码行之后,应该发送数据校验和。数据校验和即为上次校验和计算之后所有发送的原始数据的和。数据校验和以ASCII码的方式发送,以“\\r\\n”结束。接收器在收到校验和后与它接收的数据的校验和相比较,如果校验和匹配,接收器就发送“OK\\r\\n”,并等待下一次发送。如果校验和不匹配,接收器就发送“RESEND\\r\\n”。3.在数据发送结束,即使不足20个UU编码行也仍然应该发送数据校验和。由于FLASH的烧写通常是以4096字节为单位的,所以在每发送4096字节之后也必须发送一个数据校验和。(4096字节=91个UU编码行+1个字节=4×20个UU编码行+11UU编码行+1个字节)所以实际发送4096字节数据的过程如下:WRITE63BYTES(1)WRITE63BYTES(2)WRITE63BYTES(3)......WRITE63BYTES(18)WRITE63BYTES(19)WRITE63BYTES(20)WRITECHECKSUM(已发送900字节)WRITE63BYTES(21)WRITE63BYTES(22)WRITE63BYTES(23)......WRITE63BYTES(38)WRITE63BYTES(39)WRITE63BYTES(40)WRITECHECKSUM(已发送1800字节)WRITE63BYTES(41)WRITE63BYTES(42)WRITE63BYTES(43)......WRITE63BYTES(58)WRITE63BYTES(59)WRITE63BYTES(60)WRITECHECKSUM(已发送2700字节)WRITE63BYTES(61)WRITE63BYTES(62)WRITE63BYTES(63)......WRITE63BYTES(78)WRITE63BYTES(79)WRITE63BYTES(80)WRITECHECKSUM(已发送3600字节)WRITE63BYTES(81)WRITE63BYTES(82)WRITE63BYTES(83)WRITE63BYTES(84)WRITE63BYTES(85)WRITE63BYTES(86)WRITE63BYTES(87)WRITE63BYTES(88)WRITE63BYTES(89)WRITE63BYTES(90)WRITE63BYTES(91)WRITE7BYTESWRITECHECKSUM(已发送4096字节)注意上面只包含的PC向微处理器写数据的情况,实际上若没关闭“回声”,微处理器会将上面所有数据回发一次,另外还有校验和响应等。LPC2000系列微处理器ISP编
本文标题:NXPISP
链接地址:https://www.777doc.com/doc-2889963 .html