我最近为客户设计了一个 PCB,硬件和软件一切都很好(应用程序按预期工作)。现在我们需要更新微控制器内部的程序,但由于这些 PCB 安装在世界各地的不同地方,安装引导加载程序并使用与应用程序相同的 UART 将是完美的。
板子描述
- AT32UC3L032
- 一个 UART 已用于板子和 PC 之间的通信
- 应用程序的几个 I/O
- 几个状态 LED
相关PIN和配置
PA01 # Used for entering ISP with high level
PA20 # Used for application and ISP UART
PA21 # Used for application and ISP UART
#define COM_USART (&AVR32_USART2)
#define COM_USART_RX_PIN AVR32_USART2_RXD_0_0_PIN
#define COM_USART_RX_FUNCTION AVR32_USART2_RXD_0_0_FUNCTION
#define COM_USART_TX_PIN AVR32_USART2_TXD_0_0_PIN
#define COM_USART_TX_FUNCTION AVR32_USART2_TXD_0_0_FUNCTION
#define COM_USART_IRQ AVR32_USART2_IRQ
#define COM_USART_BAUDRATE 115200
使用的工具
- 视窗
- 爱特梅尔工作室 6.1
- AVRONE 程序员
经过数小时的搜索,我找到了 ASF 3.14.0.834 中提供的 Atmel Software Framework DFU。这看起来很有希望,我能够使用提供的工具将它安装在我的板上:
- AVR32Studio 2.6.0
- program_at32uc3l-uart-isp-1.0.1.cmd(提供带有 ASF 的脚本)
- 翻转 3.4.7(批处理)
起初,我使用.bin
并.dat
提供了 ASF,使用脚本安装。现在尝试使用 batchisp 命令上传应用程序:
batchisp.exe -device at32uc3l032 -hardware RS232 -port COM1 -baudrate 115200 -operation erase f memory flash blankcheck loadbuffer myapp.hex program verify
但总是得到:
Device selection.................... PASS
Hardware selection.................. PASS
Opening port........................ PASS
Synchronzing target................. FAIL Timeout error.
我已经用 UART 的示波器 RX 和 TX 进行了测试,数据正在发送,但 PC 正在接收 27kHz 方波(不能是来自 UART 的数据,因为没有停止位或任何东西,频率也可能不一样115200bps)。
经过更多研究,我已经配置Word1
并Word2
在文件at32uc3l-uart-isp_cfg-1.0.1.dat
中获取这些值:
- 字 1:0xE11E0024
- 字 2:0x494F81AA
使用 pinPA01
作为进入 ISP 的选项。
此外,在 Atmel Studio 6.1 中加载了 DFU 的源代码,发现它们没有使用相同的串行端口配置,因此更改为与我的应用程序相同。还在 DFU 的主体内添加了一些 LED 切换。
更新板上的引导加载程序后,没有 LED 变化,相同的超时,相同的方波。
我错过了什么吗?