Tidak dapat menjalankan bootloader pada PCB khusus dengan AT32UC3L

12

Saya telah merancang PCB untuk klien baru-baru ini, semuanya baik-baik saja dengan perangkat keras dan perangkat lunak (aplikasi berfungsi sebagaimana mestinya). Sekarang kita menghadapi kebutuhan untuk memperbarui program di dalam mikrokontroler, tetapi karena PCB ini dipasang di berbagai tempat di dunia, itu akan sempurna untuk menginstal bootloader dan menggunakan UART yang sama seperti yang digunakan oleh aplikasi.

Deskripsi dewan

  • AT32UC3L032
  • Satu UART sudah digunakan untuk berkomunikasi antara board dan PC
  • Pasangan I / Os untuk aplikasi
  • Beberapa LED negara

PIN dan konfigurasi yang relevan

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

Alat yang digunakan

  • Windows XP
  • Atmel Studio 6.1
  • Programmer AVRONE

Setelah mencari selama berjam-jam, saya menemukan Atmel Software Framework DFU, yang disediakan di ASF 3.14.0.834. Itu tampak menjanjikan, saya bisa menginstalnya di papan saya menggunakan alat yang disediakan:

  • AVR32Studio 2.6.0
  • program_at32uc3l-uart-isp-1.0.1.cmd (disediakan skrip dengan ASF)
  • Balik 3.4.7 (batch)

Pada awalnya, saya menggunakan .bindan .datmenyediakan ASF, diinstal menggunakan skrip. Sekarang mencoba mengunggah aplikasi menggunakan perintah batchisp:

batchisp.exe -device at32uc3l032 -hardware RS232 -port COM1 -baudrate 115200 -operation erase f memory flash blankcheck loadbuffer myapp.hex program verify

Tapi selalu mendapatkan:

Device selection.................... PASS
Hardware selection.................. PASS
Opening port........................ PASS
Synchronzing target................. FAIL    Timeout error.

Saya sudah menguji dengan osiloskop RX dan TX dari UART, data akan naik tetapi PC menerima gelombang persegi 27kHz (tidak dapat data dari UART karena tidak ada halte atau apapun, frekuensi juga mungkin tidak sama untuk 115200bps).

Setelah penelitian lebih lanjut, saya telah mengkonfigurasi Word1dan Word2dalam file at32uc3l-uart-isp_cfg-1.0.1.datuntuk mendapatkan nilai-nilai ini:

  • Word1: 0xE11E0024
  • Word2: 0x494F81AA

Untuk menggunakan pin PA01sebagai opsi untuk masuk ke ISP.

Selain itu, memuat sumber DFU di Atmel Studio 6.1 dan memperhatikan bahwa mereka tidak menggunakan konfigurasi port serial yang sama, jadi diubah sama seperti aplikasi saya. Juga menambahkan beberapa LED untuk beralih di dalam utama DFU.

Setelah memperbarui bootloader di board, tidak ada LED yang berubah, batas waktu yang sama, gelombang persegi yang sama.

Apakah saya melewatkan sesuatu?


Alexandre Lavoie
sumber
1
Diposting sebagai tiket ke Atmel, akan melihat siapa yang benar-benar dapat membantu saya: D
Alexandre Lavoie
Pin mana yang Anda gunakan (PAxx / PBxx). Saya tidak ingat persis, tetapi untuk memasuki bootloader Anda harus menarik pin tinggi atau rendah (tergantung pada dua kata konfigurasi). Bisakah Anda mengonfirmasi bahwa Anda menekan tombol atau yang serupa?
Tom L.
@ TomL., Menggunakan PA01 (ditambahkan dalam pertanyaan). Mencoba dengan tinggi / rendah ... hasil yang sama. Bahkan jika pin ini digunakan dengan JTAG, seharusnya tidak menyebabkan masalah.
Alexandre Lavoie
Dan pin mana yang Anda gunakan untuk UART?
Tom L.
1
Hm ok, jadi tidak ada yang aneh di sini. Dapatkah Anda memeriksa kode trampolin dan jika aplikasi terhubung dengan benar ke alamat mulai flash (Anda harus melihatnya di file .map linker). Bisakah Anda memposting argumen tautan Anda?
Tom L.

Jawaban:

1

Mungkin coba gunakan programmer AVR dan Arduino IDE jika itu mungkin. Saya tahu ini bekerja dengan baik dengan mikrokontroler seri AT.

electricviolin
sumber
0

Menggunakan JTAG tanpa kode trampolin yang tepat akan menimpa BOOTLOADER yang dikirimkan oleh ATMEL. Jadi setelah pemrograman pertama dengan JTAG Anda kemungkinan besar menghapus BOOTLOADER untuk selamanya.

Sekring juga harus disetel agar bootloader dapat berfungsi yang biasanya diatur oleh pengaturan programer JTAG.

Untuk memperbaiki ini, Anda perlu memprogram BOOTLOADER kembali (diambil dari chip yang belum diprogram) ke dalam chip oleh JTAG dan mengatur sekeringnya dengan benar.

Saya berhenti menggunakan JTAG sejak dulu karena BOOTLOADER + FLIP jauh lebih nyaman dan lebih cepat. Pastikan Anda menggunakan hex bukan bin / elf dan kondisi BOOTLOADER masih benar setelah kondisi reset berakhir.

Ini adalah bagaimana saya menggunakan FLIP di 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

Di mana avr32-objcopydari folder AVRStudio dan Batchispdari FLIP. Anda hanya perlu mengubah nama file dan ID chip AVR dan COM agar sesuai dengan proyek Anda.

Jika Anda membutuhkannya, Anda juga dapat menggunakan 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

Trampolin harus diaktifkan di tautan (properti proyek) seperti inilah konfigurasi tambang:

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

Saya masih menggunakan AVR32 Studio 2.7.0 karena versi yang lebih baru adalah omong kosong sehingga konfigurasi mereka mungkin berbeda.

[Edit1] info tambahan

untuk UC3L0 yang AVR32_PIN_PA20beberapa RC generik jam (harus 32KHz tetapi bervariasi dari chip ke chip cukup banyak tanpa kalibrasi dengan prescalers) dari chip sampai tujuannya diubah ke GPIO atau apa pun sehingga ~ jam 27KHz tidak ada hubungannya dengan USART . Btw bahwa jam ini ditenagai oleh 3.3V dan menghasilkan bahkan jika inti 1.98V chip digoreng untuk kebaikan ....

Kondisi Bootloader telah AVR32_PIN_PA11diatur ke nol sebelum Reset rilis (kecuali jika Anda menerapkan kondisi / perintah DFU Anda sendiri ke dalam firmware Anda) Jadi salah satu kemungkinan adalah membuat RC yang Anda hilangkan ke status RENDAH, dan reset sebelum mengisi ulang ... atau gunakan beberapa FLIP / FLOP gate atau jumper ...

Spektre
sumber