[牛人杂谈] N76E003之ISP

[复制链接]
2802|10
 楼主| dongnanxibei 发表于 2018-8-24 10:34 | 显示全部楼层 |阅读模式
Flash存储器支持硬件编程和应用编程(IAP)。如果产品在研发阶段或产品需要更新软固件时,硬件编程就显得不太方便,采用在系统编程(ISP)方式,可使这一过程变得方便。执行ISP不需要将控制器从系统板上拆下来。通过软件控制可以重新编程设备。因此这使得更新应用程序固件ISP得到广泛的应用。
用户可以开发自己的引导代码放在LDROM中。LDROM最大为4KB。用户开发的引导代码可以通过并行烧录器或是电路编程器(ICP)下载到LDROM中去。
一般来说,ISP是PC与MCU之间进行通讯。PC通过串口传输新的用户代码给MCU。然后引导代码接收这些数据,将这些数据通过IAP命令编程到用户代码区域。新唐针对N76E003提供ISP固件和PC端软件,这样可以很容易实现ISP通过UART端口升级代码。

 楼主| dongnanxibei 发表于 2018-8-24 10:34 | 显示全部楼层
以下是简单ISP参考代码
汇编例程代码:
  1. ;******************************************************************************
  2. ; This code illustrates how to do APROM and CONFIG IAP from LDROM.
  3. ; APROM are re-programmed by the code to output P1 as 55h and P0 as aah.
  4. ; The CONFIG2 is also updated to disable BOD reset.
  5. ; User needs to configure CONFIG0 = 0x7F, CONFIG1 = 0xFE, CONFIG2 = 0xFF.
  6. ;******************************************************************************
  7. PAGE_ERASE_AP EQU 00100010b
  8. BYTE_PROGRAM_AP EQU 00100001b
  9. BYTE_READ_AP EQU 00000000b
  10. ALL_ERASE_CONFIG EQU 11100010b
  11. BYTE_PROGRAM_CONFIG EQU 11100001b
  12. BYTE_READ_CONFIG EQU 11000000b
  13. ORG 0000h
  14. CLR EA ;disable all interrupts
  15. CALL Enable_IAP
  16. CALL Enable_AP_Update
  17. CALL Erase_AP ;erase AP data
  18. CALL Program_AP ;programming AP data
  19. CALL Disable_AP_Update
  20. CALL Program_AP_Verify ;verify Programmed AP data

  21. CALL Read_CONFIG ;read back CONFIG2
  22. CALL Enable_CONFIG_Update
  23. CALL Erase_CONFIG ;erase CONFIG bytes
  24. CALL Program_CONFIG ;programming CONFIG2 with new data
  25. CALL Disable_CONFIG_Update
  26. CALL Program_CONFIG_Verify ;verify Programmed CONFIG2
  27. CALL Disable_IAP

  28. MOV TA,#0Aah ;TA protection
  29. MOV TA,#55h ;
  30. ANL CHPCON,#11111101b ;BS = 0, reset to APROM
  31. MOV TA,#0Aah
  32. MOV TA,#55h
  33. ORL CHPCON,#80h ;software reset and reboot from APROM
  34. SJMP $
  35. ;********************************************************************
  36. ; IAP Subroutine
  37. ;********************************************************************
  38. Enable_IAP:
  39. MOV TA,#0Aah ;CHPCON is TA protected
  40. MOV TA,#55h
  41. ORL CHPCON,#00000001b ;IAPEN = 1, enable IAP mode
  42. RET
  43. Disable_IAP:
  44. MOV TA,#0Aah
  45. MOV TA,#55h
  46. ANL CHPCON,#11111110b ;IAPEN = 0, disable IAP mode
  47. RET
  48. Enable_AP_Update:
  49. MOV TA,#0Aah ;IAPUEN is TA protected
  50. MOV TA,#55h
  51. ORL IAPUEN,#00000001b ;APUEN = 1, enable APROM update

  52. RET
  53. Disable_AP_Update:
  54. MOV TA,#0Aah
  55. MOV TA,#55h
  56. ANL IAPUEN,#11111110b ;APUEN = 0, disable APROM update
  57. RET
  58. Enable_CONFIG_Update:
  59. MOV TA,#0Aah
  60. MOV TA,#55h
  61. ORL IAPUEN,#00000100b ;CFUEN = 1, enable CONFIG update
  62. RET
  63. Disable_CONFIG_Update:
  64. MOV TA,#0Aah
  65. MOV TA,#55h
  66. ANL IAPUEN,#11111011b ;CFUEN = 0, disable CONFIG update
  67. RET
  68. Trigger_IAP:
  69. MOV TA,#0Aah ;IAPTRG is TA protected
  70. MOV TA,#55h
  71. ORL IAPTRG,#00000001b ;write ‘1’ to IAPGO to trigger IAP process
  72. RET

  73. ;********************************************************************
  74. ; IAP APROM Function
  75. ;********************************************************************
  76. Erase_AP:
  77. MOV IAPCN,#PAGE_ERASE_AP

  78. MOV IAPFD,#0FFh
  79. MOV R0,#00h
  80. Erase_AP_Loop:
  81. MOV IAPAH,R0
  82. MOV IAPAL,#00h
  83. CALL Trigger_IAP
  84. MOV IAPAL,#80h
  85. CALL Trigger_IAP
  86. INC R0
  87. CJNE R0,#44h,Erase_AP_Loop
  88. RET
  89. Program_AP:
  90. MOV IAPCN,#BYTE_PROGRAM_AP
  91. MOV IAPAH,#00h
  92. MOV IAPAL,#00h
  93. MOV DPTR,#AP_code
  94. Program_AP_Loop:
  95. CLR A
  96. MOVC A,@A+DPTR
  97. MOV IAPFD,A
  98. CALL Trigger_IAP
  99. INC DPTR
  100. INC IAPAL
  101. MOV A,IAPAL
  102. CJNE A,#14,Program_AP_Loop
  103. RET
  104. Program_AP_Verify:
  105. MOV IAPCN,#BYTE_READ_AP

  106. MOV IAPAH,#00h
  107. MOV IAPAL,#00h
  108. MOV DPTR,#AP_code
  109. Program_AP_Verify_Loop:
  110. CALL Trigger_IAP
  111. CLR A
  112. MOVC A,@A+DPTR
  113. MOV B,A
  114. MOV A,IAPFD
  115. CJNE A,B,Program_AP_Verify_Error
  116. INC DPTR
  117. INC IAPAL
  118. MOV A,IAPAL
  119. CJNE A,#14,Program_AP_Verify_Loop
  120. RET
  121. Program_AP_Verify_Error:
  122. CALL Disable_IAP
  123. MOV P0,#00h
  124. SJMP $
  125. ;********************************************************************
  126. ; IAP CONFIG Function
  127. ;********************************************************************
  128. Erase_CONFIG:
  129. MOV IAPCN,#ALL_ERASE_CONFIG
  130. MOV IAPAH,#00h
  131. MOV IAPAL,#00h
  132. MOV IAPFD,#0FFh

  133. CALL Trigger_IAP
  134. RET
  135. Read_CONFIG:
  136. MOV IAPCN,#BYTE_READ_CONFIG
  137. MOV IAPAH,#00h
  138. MOV IAPAL,#02h
  139. CALL Trigger_IAP
  140. MOV R7,IAPFD
  141. RET
  142. Program_CONFIG:
  143. MOV IAPCN,#BYTE_PROGRAM_CONFIG
  144. MOV IAPAH,#00h
  145. MOV IAPAL,#02h
  146. MOV A,R7
  147. ANL A,#11111011b
  148. MOV IAPFD,A ;disable BOD reset
  149. MOV R6,A ;temp data
  150. CALL Trigger_IAP
  151. RET
  152. Program_CONFIG_Verify:
  153. MOV IAPCN,#BYTE_READ_CONFIG
  154. MOV IAPAH,#00h
  155. MOV IAPAL,#02h
  156. CALL Trigger_IAP
  157. MOV B,R6
  158. MOV A,IAPFD
  159. CJNE A,B,Program_CONFIG_Verify_Error
  160. RET

  161. Program_CONFIG_Verify_Error:
  162. CALL Disable_IAP
  163. MOV P0,#00h
  164. SJMP $
  165. ;********************************************************************
  166. ; APROM code
  167. ;********************************************************************
  168. AP_code:
  169. DB 75h,0B1h, 00h ;OPCODEs of “MOV P0M1,#0”
  170. DB 75h,0B3h, 00h ;OPCODEs of “MOV P1M1,#0”
  171. DB 75h, 90h, 55h ;OPCODEs of “MOV P1,#55h”
  172. DB 75h,080h,0Aah ;OPCODEs of “MOV P0,#0Aah”
  173. DB 80h,0Feh ;OPCODEs of “SJMP $”
  174. END


按照那条路,一步一步走,如果感觉慢,那就加快一些脚步,时不我待,可是别因为着急就什么也不管不顾,那样损失会更多
598330983 发表于 2018-8-25 23:40 | 显示全部楼层
可以改个名字:串口升级。

评论

ISP检测不到N76E003怎么办呀  发表于 2018-9-3 21:36
598330983 发表于 2018-8-25 23:41 | 显示全部楼层
串口刷固件。
小明的同学 发表于 2018-8-26 18:17 | 显示全部楼层
汇编难易理解。

评论

还好啦,懂汇编能写出更好的C语言程序  发表于 2018-9-7 16:46
xinpian101 发表于 2018-9-8 23:34 | 显示全部楼层
汇编代码现在会的人不多了。
dongliushui 发表于 2018-9-9 21:12 | 显示全部楼层
ICP ISP IAP把我搞晕了。
ClimberAzure 发表于 2018-9-10 12:20 | 显示全部楼层
学习了
幸福小强 发表于 2018-9-10 15:48 | 显示全部楼层
ICP是硬件实现的,ISP是软件互通实现的。IAP是软件自身实现的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

225

主题

3848

帖子

18

粉丝
快速回复 在线客服 返回列表 返回顶部