ไม่สามารถให้ bootloader ทำงานบน PCB แบบกำหนดเองด้วย AT32UC3L


12

ฉันเพิ่งออกแบบ PCB สำหรับลูกค้าเมื่อเร็ว ๆ นี้ทุกอย่างใช้ได้ดีกับฮาร์ดแวร์และซอฟต์แวร์ ตอนนี้เรากำลังเผชิญหน้ากับความจำเป็นในการอัพเดทโปรแกรมภายในไมโครคอนโทรลเลอร์ แต่เนื่องจาก PCB เหล่านี้ติดตั้งในสถานที่ต่าง ๆ ทั่วโลกจึงเป็นการดีที่จะติดตั้ง bootloader และใช้ UART เดียวกันกับที่ใช้งานโดยแอปพลิเคชัน

คำอธิบายคณะกรรมการ

  • AT32UC3L032
  • UART หนึ่งอันใช้ในการสื่อสารระหว่างบอร์ดกับพีซี
  • คู่ของ I / Os สำหรับแอปพลิเคชัน
  • ไฟสถานะคู่

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

ฉันทดสอบกับ oscilloscope RX และ TX จาก UART แล้วข้อมูลกำลังจะขึ้นบอร์ด แต่พีซีได้รับคลื่นสี่เหลี่ยม 27kHz (ไม่สามารถเป็นข้อมูลจาก UART ได้เนื่องจากไม่มีบิตหยุดหรืออะไรก็ตามความถี่อาจไม่เหมือนกันสำหรับ 115200bps)

หลังจากการวิจัยเพิ่มเติมฉันได้กำหนดค่าWord1และWord2ในไฟล์at32uc3l-uart-isp_cfg-1.0.1.datเพื่อรับค่าเหล่านี้:

  • Word1: 0xE11E0024
  • Word2: 0x494F81AA

หากต้องการใช้พินPA01เป็นตัวเลือกเพื่อป้อนใน ISP

อีกทั้งโหลดแหล่งที่มาของ DFU ใน Atmel Studio 6.1 และสังเกตว่าพวกเขาไม่ได้ใช้การกำหนดค่าพอร์ตอนุกรมเดียวกันดังนั้นจึงเปลี่ยนสำหรับแอปพลิเคชันของฉัน นอกจากนี้ยังเพิ่มการสลับ LED บางส่วนภายในหลักของ DFU

หลังจากอัปเดต bootloader ในบอร์ดไม่มีการเปลี่ยนแปลงไฟ LED หมดเวลาเดียวกันคลื่นสี่เหลี่ยมเดียวกัน

ฉันพลาดอะไรไปรึเปล่า?



1
โพสต์เป็นตั๋วไป Atmel จะเห็นว่าใครสามารถช่วยฉันได้จริงๆ: D
Alexandre Lavoie

คุณใช้พินใด (PAxx / PBxx) ฉันจำไม่ได้ว่าแน่นอน แต่เพื่อเข้าสู่ bootloader คุณควรจะดึงพินสูงหรือต่ำ (ขึ้นอยู่กับคำสองคำที่กำหนดค่า) คุณช่วยยืนยันว่าคุณกดปุ่มหรือสิ่งที่คล้ายกันได้หรือไม่?
Tom L.

@TomL. โดยใช้ PA01 (เพิ่มคำถาม) พยายามด้วยทั้งสูง / ต่ำ ... ผลเหมือนกัน แม้ว่าขานี้จะใช้กับ JTAG ไม่ควรทำให้เกิดปัญหา
Alexandre Lavoie

และหมุดใดที่คุณใช้สำหรับ UART
Tom L.

1
หืมมมไม่มีอะไรผิดปกติที่นี่ คุณสามารถตรวจสอบรหัสแทรมโพลีนและหากแอปพลิเคชันเชื่อมโยงอย่างถูกต้องกับที่อยู่เริ่มต้นแฟลช (คุณควรเห็นสิ่งนี้ในไฟล์ linker .map) คุณสามารถโพสต์อาร์กิวเมนต์ตัวลิงก์ของคุณได้หรือไม่?
Tom L.

คำตอบ:


1

อาจลองใช้โปรแกรมเมอร์ AVR และ Arduino IDE ถ้าเป็นไปได้ ฉันรู้ว่ามันใช้งานได้ดีกับไมโครคอนโทรลเลอร์ตระกูล AT


0

การใช้ JTAG โดยไม่มีรหัสแทรมโพลีนที่เหมาะสมจะเขียนทับ BOOTLOADER ที่จัดส่งโดย ATMEL ดังนั้นหลังจากการเขียนโปรแกรมครั้งแรกกับ JTAG คุณอาจลบ BOOTLOADER ได้ดีที่สุด

นอกจากนี้ฟิวส์ต้องถูกตั้งค่าเพื่อให้ bootloader สามารถทำงานได้ซึ่งการตั้งค่าเริ่มต้นของโปรแกรมเมอร์ JTAG มักจะเกิดปัญหา

เพื่อซ่อมแซมสิ่งนี้คุณต้องตั้งโปรแกรม BOOTLOADER ย้อนกลับ (นำมาจากชิปที่ยังไม่ได้เขียนโปรแกรม) ลงในชิปโดย 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จากโฟลเดอร์ bin 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นาฬิกาทั่วไป (ควรจะ 32KHz แต่มันแตกต่างจากชิปชิปค่อนข้างมากโดยไม่ต้องสอบเทียบกับ prescalers) จากชิปจนถึงจุดประสงค์ของมันจะเปลี่ยนไปGPIOหรือสิ่งอื่นใดเพื่อให้ ~ นาฬิกา 27KHz มีอะไรจะทำอย่างไรกับUSART Btw นาฬิกานั้นใช้พลังงานจาก 3.3V และสร้างแม้ว่าชิป 1.98V จะทอดอย่างดี ....

เงื่อนไข Bootloader AVR32_PIN_PA11ตั้งค่าเป็นศูนย์ก่อนรีเซ็ตรีลีส (เว้นแต่คุณจะใช้เงื่อนไข / คำสั่งDFUของคุณเองในเฟิร์มแวร์ของคุณ) ดังนั้นความเป็นไปได้อย่างหนึ่งคือการสร้าง RC ที่คุณกระจายไปสู่สถานะ LOW และรีเซ็ตก่อนชาร์จประจุใหม่ ... หรือใช้เกต FLIP / FLOP หรือจัมเปอร์ ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.