一板网电子技术论坛

发表于: 2016-6-6 23:32:29 | 显示全部楼层

iMX6-Rex-with-NXP-MCU-.jpg

目标

我们的目标是,通过将LPC1769连接到iMX6的方式,使得我们能够可以直接从运行在Rex上的Linux更新微控制器的固件。


硬件连接

为了方便测试,我们使用的是LCPXpresso开发板,按以下方式连接到iMX6 Rex开发板


iMX6 Rex                                         LPCXpresso   


UART2_RXD (J31 pin 3)    <<<<    TXD (J6 pin 21)   


UART2_TXD (J31 pin 5)    >>>>    RXD (J6 pin 22)   


GPIO 2 (J34 pin 4)           >>>>    ISP# (J6 pin 51)   


GPIO 3 (J34 pin 5)           >>>>    RST# (J6 pin 4)   


GND (J31 pin 9)               - – - -     GND (J6 pin 1)   


+3.3V (J31 pin 10)          - – - -     +3.3V (J6 pin 28)



软件 - lpc21isp

原版的lpc21isp代码在Linux下运行会有一些问题,因此我们使用的是Senseg版本。

为了修复“error: ‘ISP_ENVIRONMENT’ has no member named ‘ProgramChip’ while compiling the code”,使用以下方式更新 lpc21isp.h文件:

  1. //#if defined(_WIN32) && !defined(__CYGWIN__)
  2. //#define COMPILE_FOR_WINDOWS
  3. //#define COMPILED_FOR "Windows"
  4. //#elif defined(__CYGWIN__)
  5. //#define COMPILE_FOR_CYGWIN
  6. //#define COMPILED_FOR "Cygwin"
  7. //#elif (defined(__arm__) || defined(__thumb__)) && (!defined(__raspi__))
  8. //#define COMPILE_FOR_LPC21
  9. //#define COMPILED_FOR "ARM"
  10. //#define printf iprintf
  11. //#elif defined(__APPLE__)
  12. //#define COMPILE_FOR_LINUX
  13. //#define COMPILED_FOR "Apple MacOS X"
  14. //#elif defined(__FreeBSD__)
  15. //#define COMPILE_FOR_LINUX
  16. //#define COMPILED_FOR "FreeBSD"
  17. //#elif defined(__OpenBSD__)
  18. //#define COMPILE_FOR_LINUX
  19. //#define COMPILED_FOR "OpenBSD"
  20. //#else
  21. #define COMPILE_FOR_LINUX
  22. #define COMPILED_FOR "Linux"
  23. //#endif
复制代码

同步也有一点问题,因此我们必须将lpcprog.c(ReceiveComPort函数)更改如下:

  1. } while (((*RealSize) < MaxSize) && (SerialTimeoutCheck(IspEnvironment) == 0) && (nr_of_0x0A < WantedNr0x0A) && !eof);
复制代码

然后只需要编译一下。

  1. $ make -f Makefile clean all
复制代码

烧写过程

为了将RESET和ISP设成低电平(我们已经将这两个信号接到GPIO扩展接口),我们使用i2cset命令:

  1. $ i2cset 1 0x27 0x02 0xF3 // set GPIO 0.2 and GPIO 0.3 to low
  2. $ i2cset 1 0x27 0x06 0xF3 // set GPIO 0.2 and GPIO 0.3 as output
复制代码

将RESET变为高电平:

  1. $ i2cset 1 0x27 0x02 0xFB // set GPIO 0.3 to high
复制代码

现在NXP微控制器处于ISP模式。运行lpc21isp工具:

  1. $ ./lpc21isp -bin blink.bin /dev/ttymxc1 115200 12000
  2. lpc21isp version 1.83
  3. File blink.bin:
  4.         loaded...
  5.         image size : 10548
  6. Image size : 10548
  7. Synchronizing (ESC to abort).Answer Synchronized

  8. String:53 79 6E 63 68 72 6F 6E 69 7A 65 64 D A 0  OK
  9. Read bootcode version: 2
  10. 4
  11. Read part ID: LPC1769, 512 kiB ROM / 64 kiB SRAM (0x26113F37)
  12. Read Unique ID:
  13. succeeded
  14. Will start programming at Sector 1 if possible, and conclude with Sector 0 to ensure that checksum is written last.
  15. Erasing sector 0 first, to invalidate checksum. OK
  16. Sector 1: ...............................................................................................
  17. Sector 2: ...........................................................
  18. Sector 0: ..............................................................................................
  19. Download Finished... taking 1 seconds
  20. Now launching the code
复制代码

将开发板退出ISP模式,并转到RESET状态:

  1. $ i2cset 1 0x27 0x02 0xF7 // set GPIO 0.2 to high and GPIO 0.3 to low
复制代码

取消RESET:

  1. $ i2cset 1 0x27 0x02 0xFF// set GPIO 0.2 and GPIO 0.3 to high
复制代码

现在新的二进制文件应该在NXP微控制器上运行了。我们使用了一个简单的LED闪烁程序作为测试。测试的源码可以在这里下载:lpc21isp source code for iMX6


跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 14 | 回复: 22

小黑屋|手机版|

GMT+8, 2018-1-19 02:14 , Processed in 0.073007 second(s), 8 queries , Gzip On, File On. Powered by Discuz! X3.4

YiBoard一板网 © 2001-2013 Comsenz Inc. ( 京ICP备16014155号 )

QQ

快速回复 返回顶部 返回列表