Недавно я разработал печатную плату для клиента, все хорошо с аппаратным и программным обеспечением (приложение работает так, как должно). Теперь мы сталкиваемся с необходимостью обновления программы внутри микроконтроллера, но, поскольку эти печатные платы установлены в разных местах по всему миру, было бы идеально установить загрузчик и использовать тот же UART, который используется приложением.
Описание платы
- AT32UC3L032
- Один UART уже используется для связи между платой и ПК
- Пара входов / выходов для приложения
- Пара государственных светодиодов
Соответствующие 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
- Атмел Студия 6.1
- AVRONE программист
После многих часов поиска я обнаружил DFU Atmel Software Framework, предоставленный в ASF 3.14.0.834. Это выглядело многообещающе, я смог установить его на свою доску, используя предоставленные инструменты:
- AVR32Studio 2.6.0
- program_at32uc3l-uart-isp-1.0.1.cmd (предоставляется скрипт с ASF)
- Flip 3.4.7 (batchisp)
Сначала я использовал .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.
Я проверил с помощью осциллографа RX и TX от UART, данные собираются на плату, но ПК получает прямоугольную волну 27 кГц (не может быть данных от UART, поскольку нет стоп-бита или чего-либо еще, также частота, вероятно, не одинакова для 115200 бит).
После дополнительных исследований я настроил Word1
и Word2
в файле at32uc3l-uart-isp_cfg-1.0.1.dat
получить эти значения:
- Word1: 0xE11E0024
- Word2: 0x494F81AA
Использовать пин-код в PA01
качестве опции для входа в интернет-провайдера.
Кроме того, загрузил исходный код DFU в Atmel Studio 6.1 и заметил, что он не использует ту же конфигурацию последовательного порта, поэтому изменился для того же, что и мое приложение. Также добавлены некоторые светодиоды для переключения внутри основного DFU.
После обновления загрузчика на плате светодиоды не меняются, одинаковое время ожидания, одинаковая прямоугольная волна.
Я что-то пропустил?