Не вдається заставити завантажувач працювати на користувальницькій платі з AT32UC3L


12

Нещодавно я розробив друковану плату для клієнта, з обладнанням та програмним забезпеченням все нормально (додаток працює як належить). Зараз ми стикаємося з необхідністю оновити програму всередині мікроконтролера, але оскільки ці друковані плати встановлені в різних місцях світу, було б ідеально встановити завантажувач і використовувати той самий UART, як і додаток.

Опис дошки

  • AT32UC3L032
  • Один UART вже використовувався для спілкування між платою та ПК
  • Пара вводу-виводу для програми
  • Пара державних світлодіодів

Відповідні 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

Використовувані інструменти

  • Windows XP
  • Atmel Studio 6.1
  • Програміст AVRONE

Після багатогодинного пошуку я знайшов програму Atmel Software Framework DFU, надану в ASF 3.14.0.834. Це виглядало багатообіцяюче, я зміг встановити його на своїй дошці за допомогою наданих інструментів:

  • 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.

Я тестував осцилоскоп RX і TX від UART, дані збираються на борт, але ПК отримує квадратну хвилю 27 кГц (неможливо бути даними від UART, оскільки немає стоп-біту чи нічого, також частота, ймовірно, не однакова для 115200bps).

Після додаткових досліджень, я налаштував Word1і Word2в файлі , at32uc3l-uart-isp_cfg-1.0.1.datщоб отримати ці значення:

  • Word1: 0xE11E0024
  • Word2: 0x494F81AA

Використовувати штифт PA01як опцію для входу в Інтернет-провайдера.

Також завантажили джерело DFU в Atmel Studio 6.1 і помітили, що вони не використовують ту саму конфігурацію послідовного порту, тому змінено на те саме, що і моя програма. Також додано кілька світлодіодів, що перемикаються всередині основної частини DFU.

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

Я щось пропускаю?



1
Опублікований як квиток в Atmel, побачу, хто може мені справді допомогти: D
Александр Лавуа

Які штифти ви використовуєте (PAxx / PBxx). Я точно не пам’ятаю, але для того, щоб увійти до завантажувача, ви повинні витягнути шпильку високою або низькою (залежно від двох слів конфігурації). Чи можете ви підтвердити, що ви натискаєте кнопку чи подібне?
Том Л.

@TomL., Використовуючи PA01 (додано у питанні). Спробував і високий / низький ... однаковий результат. Навіть якщо ця штифта використовується з JTAG, це не повинно викликати проблем.
Олександр Лавуа

А які шпильки ви використовуєте для UART?
Том Л.

1
Гм ок, так що тут нічого незвичайного. Чи можете ви перевірити код батута і чи правильно програма пов’язана з початковою адресою спалаху (ви повинні побачити це у файлі .map файлу посилання). Чи можете ви розмістити аргументи свого лінкера?
Том Л.

Відповіді:


1

Можливо, спробуйте скористатися програмістом AVR та Arduino IDE, якщо це можливо. Я знаю, що це добре працює з мікроконтролерами серії AT.


0

Використання JTAG без належного коду батута замінить BOOTLOADER, що постачається ATMEL. Тож після першого програмування з JTAG ви, швидше за все, назавжди видалили BOOTLOADER.

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

Для того, щоб виправити це, вам потрібно запрограмувати BOOTLOADER назад (взятий із ще непрограмованого ще чіпа) у чіп JTAG та правильно встановити запобіжники.

Я давно перестав використовувати JTAG, оскільки BOOTLOADER + FLIP набагато зручніше та швидше. Переконайтеся, що ви використовуєте шістнадцятковий замість 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 бін і Batchispвід FLIP. Вам просто потрібно змінити назви файлів і ідентифікатор чіпа 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, оскільки новіші версії - це коні, так що в них конфігурація може бути іншою.

[Редагувати1] додаткову інформацію

для UC3L0AVR32_PIN_PA20 деякі RC загальні годинник (повинно бути 32 кГц , але вона варіюється від чіпа до чіпу досить багато без калібрування з подільників) від чіпа до його мета не буде змінений на GPIO або що - небудь ще , так що ~ 27KHz годинник не має нічого спільного з USART . Btw цей годинник працює від 3,3 В і генерує навіть якщо чіп 1,98 В ядро ​​смажиться назавжди ....

Умова завантажувача AVR32_PIN_PA11встановлена ​​на нулі до скидання Reset (якщо ви не реалізуєте власні умови / команди DFU у вашій прошивці). Отож, одна з можливостей - це зробити RC, який ви будете переносити на стан LOW, і скинути його, перш ніж він заряджатиметься назад ... або використовувати деякі ворота FLIP / FLOP або перемичку ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.