Невозможно получить загрузчик, работающий на пользовательской плате с AT32UC3L

12

Недавно я разработал печатную плату для клиента, все хорошо с аппаратным и программным обеспечением (приложение работает так, как должно). Теперь мы сталкиваемся с необходимостью обновления программы внутри микроконтроллера, но, поскольку эти печатные платы установлены в разных местах по всему миру, было бы идеально установить загрузчик и использовать тот же 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.

После обновления загрузчика на плате светодиоды не меняются, одинаковое время ожидания, одинаковая прямоугольная волна.

Я что-то пропустил?


Александр Лавуа
источник
1
Размещено в виде билета в Атмель, посмотрим, кто действительно сможет мне помочь: D
Александр Лавуа
Какие контакты вы используете (PAxx / PBxx). Я точно не помню, но чтобы войти в загрузчик, вы должны тянуть пин-код высоко или низко (в зависимости от двух слов конфигурации). Можете ли вы подтвердить, что вы нажимаете кнопку или подобное?
Том Л.
@TomL., Используя PA01 (добавлено в вопросе). Пробовал как с высоким / низким ... тот же результат. Даже если этот вывод используется с JTAG, проблем не должно быть.
Александр Лавуа
А какие контакты вы используете для UART?
Том Л.
1
Хм хорошо, так что ничего необычного здесь. Можете ли вы проверить код батута и если приложение правильно связано с начальным адресом флэш-памяти (вы должны увидеть это в файле компоновщика .map). Можете ли вы опубликовать свои аргументы компоновщика?
Том Л.

Ответы:

1

Возможно, попробуйте использовать программатор AVR и Arduino IDE, если это возможно. Я знаю, что это хорошо работает с микроконтроллерами серии AT.

electricviolin
источник
0

Использование JTAG без надлежащего кода батута перезапишет ЗАГРУЗЧИК, поставляемый банкоматом. Итак, после первого программирования с JTAG вы, скорее всего, стерли BOOTLOADER навсегда.

Также предохранители должны быть установлены, чтобы позволить загрузчику работать, какие настройки по умолчанию программиста JTAG обычно портят.

Чтобы исправить это, вам нужно запрограммировать ЗАГРУЗЧИК обратно (взятый из незапрограммированного чипа) в чип с помощью JTAG и правильно установить предохранители.

Я давно перестал использовать JTAG, так как BOOTLOADER + FLIP намного удобнее и быстрее. Убедитесь, что вы используете hex вместо bin / elf и условие BOOTLOADER остается верным после завершения условия сброса.

Вот как я использую FLIP на RS232:

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. Вам просто нужно изменить имена файлов и ID чипа AVR и 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- тактовые импульсы (должны быть 32 кГц, но они сильно варьируются от чипа к чипу без калибровки с прескалерами) от чипа до тех пор, пока его назначение не будет изменено на GPIO или что-либо еще, поэтому тактовая частота ~ 27 кГц не имеет ничего общего с USART . Кстати, эти часы питаются от 3,3 В и генерируют даже если ядро ​​чипа 1,98 В зажарено навсегда ....

Условие загрузчика AVR32_PIN_PA11устанавливается в ноль до сброса сброса (если вы не внедрили свои собственные условия / команды DFU в свою прошивку). Поэтому одной из возможностей является создание RC, который вы рассеиваете до состояния LOW, и сбрасываете, прежде чем он зарядится обратно ... или используйте некоторые FLIP / FLOP ворота или перемычки ...

Spektre
источник