AT32UC3L로 맞춤형 PCB에서 부트 로더를 작동시킬 수 없음


12

나는 최근에 클라이언트를 위해 PCB를 설계했다. 모든 것이 하드웨어와 소프트웨어에 문제가 없다 (애플리케이션은 예상대로 작동하고있다). 이제 우리는 마이크로 컨트롤러 내부에서 프로그램을 업데이트해야 할 필요성에 직면하고 있지만, 이러한 PCB는 전 세계 여러 곳에 설치되어 있기 때문에 부트 로더를 설치하고 애플리케이션에서 사용하는 것과 동일한 UART를 사용하는 것이 좋습니다.

보드 설명

  • AT32UC3L032
  • 보드와 PC 간의 통신에 이미 사용 된 UART 1 개
  • 애플리케이션을위한 몇 가지 I / O
  • 상태 LED 커플

관련 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

사용되는 도구

  • 윈도우 XP
  • 아트멜 스튜디오 6.1
  • AVRONE 프로그래머

몇 시간 동안 검색 한 후 ASF 3.14.0.834에서 제공되는 Atmel Software Framework DFU를 발견했습니다. 그것은 유망 해 보였고 제공된 도구를 사용하여 보드에 설치할 수있었습니다.

  • AVR32Studio 2.6.0
  • program_at32uc3l-uart-isp-1.0.1.cmd (ASF와 함께 제공되는 스크립트)
  • 플립 3.4.7 (박자)

처음 에는 스크립트를 사용하여 설치 한 ASF를 사용 .bin하고 .dat제공했습니다. 이제 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.

UART에서 오실로스코프 RX 및 TX로 테스트했는데 데이터가 보드에 연결되지만 PC에 27kHz 구형파가 수신됩니다 (스톱 비트 또는 기타 요소가 없기 때문에 UART에서 데이터가 될 수 없음). 115200bps).

더 많은 연구를 마친 후에 이러한 값을 얻도록 구성 Word1하고 Word2파일 at32uc3l-uart-isp_cfg-1.0.1.dat을 작성 했습니다.

  • 워드 1 : 0xE11E0024
  • 워드 2 : 0x494F81AA

PA01ISP에 입력하는 옵션으로 핀을 사용 합니다.

또한 Atmel Studio 6.1에 DFU 소스를로드하고 동일한 직렬 포트 구성을 사용하지 않는 것을 알았으므로 내 응용 프로그램과 동일하게 변경되었습니다. 또한 DFU의 메인 내부에 일부 LED 토글이 추가되었습니다.

보드에서 부트 로더를 업데이트 한 후 LED가 변경되지 않고 동일한 시간 초과, 동일한 구형파가 발생합니다.

뭔가 빠졌습니까?



1
Atmel에 티켓으로 게시하면 누가 나를 정말로 도와 줄 수 있는지 알게 될 것입니다 : D
Alexandre Lavoie

(PAxx / PBxx)를 사용하는 핀 정확히 기억하지는 않지만 부트 로더에 들어가려면 두 가지 구성 단어에 따라 핀을 높거나 낮게 잡아야합니다. 버튼이나 이와 유사한 것을 누르고 있는지 확인할 수 있습니까?
Tom L.

PA01을 사용하여 @TomL. (문제에 추가). 높음 / 낮음 ... 같은 결과로 시도했습니다. 이 핀을 JTAG와 함께 사용하더라도 문제가 발생하지 않습니다.
Alexandre Lavoie

그리고 UART에 어떤 핀을 사용하고 있습니까?
Tom L.

1
흠 .. 여기서 특이한 것은 없습니다. 트램펄린 코드를 확인하고 응용 프로그램이 플래시 시작 주소에 올바르게 연결되어 있는지 확인할 수 있습니다 (링커 ​​.map 파일에 표시되어 있음). 링커 인수를 게시 할 수 있습니까?
Tom L.

답변:


1

가능하다면 AVR 프로그래머와 Arduino IDE를 사용해보십시오. AT 시리즈 마이크로 컨트롤러와 잘 작동한다는 것을 알고 있습니다.


0

적절한 트램폴린 코드없이 JTAG를 사용하면 ATMEL이 제공 한 BOOTLOADER를 덮어 씁니다. 따라서 JTAG로 처음 프로그래밍 한 후 BOOTLOADER를 삭제했을 가능성이 높습니다.

또한 부트 로더가 JTAG 프로그래머의 기본 설정이 일반적으로 작동하도록 퓨즈를 설정해야합니다.

이 문제를 해결하려면 JTAG를 통해 BOOTLOADER를 (프로그램되지 않은 칩에서 가져온) 칩으로 프로그래밍하고 퓨즈를 올바르게 설정해야합니다.

BOOTLOADER + FLIP이 훨씬 더 편안하고 빠르기 때문에 JTAG 사용을 오래 전에 중단했습니다. bin / elf 대신 16 진수를 사용하고 재설정 조건이 종료 된 후에도 BOOTLOADER 조건이 여전히 참인지 확인하십시오.

이것이 RS232에서 FLIP을 사용하는 방법입니다.

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-objcopyAVRStudio bin 폴더에서하고 BatchispFLIP에서입니다. 프로젝트와 일치하도록 파일 이름과 AVR 칩 ID 및 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] 추가 정보

대한 UC3L0 (가) AVR32_PIN_PA20일부입니다 RC 일반 시계 (32kHz에서해야하지만, 프리스케일러와 교정하지 않고 칩에 칩에서 꽤 많이 다릅니다) 그 목적이 변경 될 때까지 칩에서 GPIO 정도 다른 무엇이라도 ~ 27KHz 시계는 함께 할 수 없다 USART . Btw는 클럭이 3.3V로 구동되며 칩 1.98V 코어가 제대로 작동하지 않아도 발생합니다 ....

Bootloader 조건은 AVR32_PIN_PA11Reset release 이전에 0으로 설정되었습니다 ( 펌웨어에 자체 DFU 조건 / 명령을 구현하지 않는 한 ) RC를 LOW 상태로 소멸시키고 충전하기 전에 재설정하는 것이 가능합니다 ... 또는 일부 FLIP / FLOP 게이트 또는 점퍼를 사용하십시오 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.