无法使用AT32UC3L在自定义PCB上启动引导程序


12

我最近为客户设计了一个PCB,硬件和软件(应用程序按预期的方式运行)一切正常。现在,我们面临着更新微控制器内部程序的需求,但是由于这些PCB安装在世界各地,因此安装引导加载程序并使用与应用程序相同的UART将是完美的选择。

董事会说明

  • AT32UC3L032
  • 一个UART已经用于板与PC之间的通信
  • 应用程序的几个I / O
  • 几个状态LED

相关的PINS和配置

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

使用的工具

  • Windows XP
  • Atmel Studio 6.1
  • AVRONE程序员

经过数小时的搜索,我找到了ASF 3.14.0.834中提供的Atmel软件框架DFU。看起来很有希望,我可以使用提供的工具将其安装在板上:

  • AVR32Studio 2.6.0
  • program_at32uc3l-uart-isp-1.0.1.cmd(ASF提供的脚本)
  • 翻转3.4.7(batchisp)

首先,我使用了ASF .bin.dat随ASF提供了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)。

经过更多研究,我已经配置Word1Word2在文件at32uc3l-uart-isp_cfg-1.0.1.dat中获取以下值:

  • 字1:0xE11E0024
  • 字2:0x494F81AA

使用pin PA01作为选项输入ISP。

另外,在Atmel Studio 6.1中加载了DFU的源,并注意到它们没有使用相同的串行端口配置,因此对它的更改与我的应用程序相同。还在DFU的主体内添加了一些LED开关。

更新主板中的引导加载程序后,没有LED发生变化,相同的超时时间,相同的方波。

我想念什么吗?



1
作为发给Atmel的票子,您会看到谁能真正帮助到我:D
Alexandre Lavoie 2014年

您正在使用哪些引脚(PAxx / PBxx)。我记不清了,但是要进入引导加载程序,您应该将引脚拉高或拉低(取决于两个配置字)。您可以确认您正在按下按钮或类似按钮吗?
Tom L.

@TomL。,使用PA01(有问题地添加)。尝试过高/低...相同的结果。即使此引脚与JTAG一起使用,也不会引起问题。
Alexandre Lavoie 2014年

您将哪些引脚用于UART?
汤姆·L.

1
好的,所以这里没什么异常。您可以检查蹦床代码以及应用程序是否正确链接到Flash起始地址(您应该在链接器.map文件中看到此代码)。您可以发布链接器参数吗?
汤姆·L.

Answers:


1

如果可能的话,也许尝试使用AVR编程器和Arduino IDE。我知道它可以与AT系列微控制器配合使用。


0

在没有正确的蹦床代码的情况下使用JTAG将覆盖ATMEL随附的BOOTLOADER。因此,在首次使用JTAG编程后,您很可能永久擦除了BOOTLOADER。

同样,必须设置保险丝以使引导加载程序能够正常工作,而JTAG编程器的默认设置通常会搞砸。

为了解决这个问题,您需要通过JTAG将BOOTLOADER编程回芯片(取自未编程的芯片),并正确设置保险丝。

我很早以前就停止使用JTAG,因为BOOTLOADER + FLIP更舒适,更快捷。确保您使用的是十六进制而不是bin / elf,并且重置条件结束后BOOTLOADER条件仍然为true。

这就是我在RS232上使用FLIP的方式:

avr32-objcopy -O ihex AT32UC3L064.elf AT32UC3L064.hex
Batchisp -device AT32UC3L064 -hardware RS232 -port COM1 -baudrate 115200 -operation onfail abort memory flash erase f blankcheck loadbuffer AT32UC3L064.hex program start reset 0

哪里avr32-objcopy是AVRSTUDIO bin文件夹,并Batchisp从FLIP。您只需要更改文件名,AVR芯片ID和COM即可匹配您的项目。

如果需要,也可以使用USB:

avr32-objcopy -O ihex cpp_trampoline.elf AT32UC3A3256.hex
Batchisp -device AT32UC3A3256 -hardware USB -operation onfail abort memory flash erase f blankcheck loadbuffer AT32UC3A3256.hex program start reset 0

必须在链接器(项目属性)中启用蹦床,这就是我的配置的样子:

linker: -nostartfiles -Wl,--gc-sections -Wl,-e,_trampoline -mpart=uc3l032 -Wl,--gc-sections --direct-data --rodata-writable

我仍在使用AVR32 Studio 2.7.0,因为较新的版本太糟糕了,因此在它们中的配置可能有所不同。

[Edit1]其他信息

对于UC3L0, 从芯片一直AVR32_PIN_PA20是某个RC通用时钟(应为32KHz,但芯片之间的差异很大,无需使用预分频器进行校准),直到其用途更改为GPIO或其他任何东西为止,因此〜27KHz时钟与该时钟无关USART。顺便说一句,即使芯片1.98V内核油炸好,该时钟也由3.3V供电并产生....

Bootloader的条件AVR32_PIN_PA11在复位释放之前已设置为零(除非您在固件中实现了自己的DFU条件/命令),因此一种可能性是使RC耗散到LOW状态,并在其重新充电之前复位...或使用一些FLIP / FLOP门或跳线...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.