Недавно я разработал печатную плату для клиента, все хорошо с аппаратным и программным обеспечением (приложение работает так, как должно). Теперь мы сталкиваемся с необходимостью обновления программы внутри микроконтроллера, но, поскольку эти печатные платы установлены в разных местах по всему миру, было бы идеально установить загрузчик и использовать тот же 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.
После обновления загрузчика на плате светодиоды не меняются, одинаковое время ожидания, одинаковая прямоугольная волна.
Я что-то пропустил?
источник
Ответы:
Возможно, попробуйте использовать программатор AVR и Arduino IDE, если это возможно. Я знаю, что это хорошо работает с микроконтроллерами серии AT.
источник
Использование JTAG без надлежащего кода батута перезапишет ЗАГРУЗЧИК, поставляемый банкоматом. Итак, после первого программирования с JTAG вы, скорее всего, стерли BOOTLOADER навсегда.
Также предохранители должны быть установлены, чтобы позволить загрузчику работать, какие настройки по умолчанию программиста JTAG обычно портят.
Чтобы исправить это, вам нужно запрограммировать ЗАГРУЗЧИК обратно (взятый из незапрограммированного чипа) в чип с помощью JTAG и правильно установить предохранители.
Я давно перестал использовать JTAG, так как BOOTLOADER + FLIP намного удобнее и быстрее. Убедитесь, что вы используете hex вместо bin / elf и условие BOOTLOADER остается верным после завершения условия сброса.
Вот как я использую FLIP на RS232:
Где
avr32-objcopy
находится из папки AVRStudio bin иBatchisp
из FLIP. Вам просто нужно изменить имена файлов и ID чипа AVR и COM в соответствии с вашим проектом.Если вам это нужно, вы также можете использовать USB:
Батут должен быть включен в компоновщик (свойства проекта), вот как выглядит мой конфиг:
Я все еще использую AVR32 Studio 2.7.0, так как более новые версии - это дерьмо, поэтому в них конфигурация может отличаться.
[Edit1] дополнительная информация
для UC3L0 -
AVR32_PIN_PA20
это некоторые общие RC- тактовые импульсы (должны быть 32 кГц, но они сильно варьируются от чипа к чипу без калибровки с прескалерами) от чипа до тех пор, пока его назначение не будет изменено на GPIO или что-либо еще, поэтому тактовая частота ~ 27 кГц не имеет ничего общего с USART . Кстати, эти часы питаются от 3,3 В и генерируют даже если ядро чипа 1,98 В зажарено навсегда ....Условие загрузчика
AVR32_PIN_PA11
устанавливается в ноль до сброса сброса (если вы не внедрили свои собственные условия / команды DFU в свою прошивку). Поэтому одной из возможностей является создание RC, который вы рассеиваете до состояния LOW, и сбрасываете, прежде чем он зарядится обратно ... или используйте некоторые FLIP / FLOP ворота или перемычки ...источник