나는 여러 해 동안 다양한 마이크로 컨트롤러와 마이크로 프로세서를 사용해 왔지만 Kinetis KE 시리즈 (특히 S9KEAZN64AMLC)에 의해 쇠약해진 것 같습니다.
2015 년 1 월 17 일 TL; DR :
Freescale 은 Kinetis Design Studio 소프트웨어 v2.0.0이이 장치 (자체 TRK-KEA64 평가 보드 포함)에서 작동하지 않음을 확인 합니다. 당분간 CodeWarrior MCU V10.6을 사용하는 것이 좋습니다.
Segger는 v4.96a ( "a"가 중요합니다. v4.96을 사용하고있었습니다. ")를 출시하여 문제를 해결하고 KDS와 함께 Segger J-Link Lite CortexM 디버거 보드를 사용하고 전체 프로그램 / 디버그 기능을 사용할 수 있습니다.
SEGGER가 v4.96a를 발표하기 전에 나는 그것이와 함께 제공 펌웨어 OpenSDA를 플래시에 프리 스케일의 저렴 ($ (15)) FRDM - KL25Z의 평가 보드의 OpenSDA 디버거를 재 프로그래밍하여 칩을 플래시 할 수 있도록 관리 USBDM (v4.10.6.240 사용). 그런 다음 USBDM의 독립형 "ARM Programmer"소프트웨어를 사용했습니다. "oldschool"디버깅에 능숙하지 않아서 디버깅 작업에 많은 시간을 소비하지 않았습니다. 온보드 대상 KL25에 "양성"프로그램을 플래시해야합니다. 그렇지 않으면 온보드 대상 KL25의 재설정 라인이 J11 컷으로도 OpenSDA 디버거에 연결되어 있으므로 프로그래밍을 방해 할 수 있습니다 (Kise Wakeham의 블로그 게시물 참조) 아래 링크).
문제를 파악하고 이메일을 통해 찾은 결과를 확인하는 데 도움을 주신 Erich Styger 에게 감사드립니다 .
이제 정기적으로 예정된 질문으로 돌아가십시오.
바보 같은 간단한 3.3V 브레이크 아웃 보드를 만들었습니다. PTA의 일부 LED가 있고 PTC의 UART 연결이 있으며 SWD 회선은 전용 회선에 있습니다. 말 그대로이 보드에 대한 공상이나 재미는 없습니다.
Cortex-M 용 J-Link Lite (J-Link LITE CortexM-9, https://www.segger.com/jlink-lite-cortexm.html 참조 )를 사용하고 있으며 OSX와 Windows 모두에서 같은 결과 : J-Link Commander 유틸리티는 칩을 식별 할 수 있으며, SRAM을 읽고 쓸 수 있으며 수동으로 읽고 주변 장치를 사용하여 올바른 메모리 매핑 된 I / O 주소에 쓸 수 있습니다. 그러나 장치를 플래시하려고하면 실패합니다.
$ JLinkExe
SEGGER J-Link Commander V4.94c ('?' for help)
Compiled Oct 31 2014 20:08:55
DLL version V4.94c, compiled Oct 31 2014 20:08:48
Firmware: J-Link Lite-Cortex-M V8 compiled Jul 17 2014 11:40:12
Hardware: V8.00
S/N: 518107921
Feature(s): GDB
VTarget = 3.332V
Info: Could not measure total IR len. TDO is constant high.
Info: Could not measure total IR len. TDO is constant high.
No devices found on JTAG chain. Trying to find device on SWD.
Info: Found SWD-DP with ID 0x0BC11477
Info: Found Cortex-M0 r0p0, Little endian.
Info: FPUnit: 2 code (BP) slots and 0 literal slots
Cortex-M0 identified.
Target interface speed: 100 kHz
J-Link>device skeazn64xxx2
Info: Device "SKEAZN64XXX2" selected (64 KB flash, 4 KB RAM).
Reconnecting to target...
Info: Found SWD-DP with ID 0x0BC11477
Info: Found SWD-DP with ID 0x0BC11477
Info: Found Cortex-M0 r0p0, Little endian.
Info: FPUnit: 2 code (BP) slots and 0 literal slots
J-Link>r
Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.
J-Link>erase
Erasing device (SKEAZN64xxx2)...
(...several second pause while it communicates with the MCU...)
****** Error: PC of target system has unexpected value after erasing sector. (PC = 0xFFFFFFFE)!
---------------------------------------------------------------------- Registers -------------------------------------------------------------------------------------
PC = FFFFFFFE
Current: R0 = 00F3E3BE, R1 = 00000001, R2 = 4004801C, R3 = 00000001
R4 = 00000000, R5 = 00000000, R6 = 000000F4, R7 = 1FFFFD61
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Info: J-Link: Flash download: Total time needed: 2.174s (Prepare: 0.894s, Compare: 0.000s, Erase: 0.736s, Program: 0.000s, Verify: 0.000s, Restore: 0.542s)
ERROR: Erase returned with error code -5.
J-Link Lite는 완벽하게 훌륭하며 (다른 Cortex-M0 프로세서 인 nRF58122 SoC를 읽고 쓸 수 있음) 장치가 다르게 작동하는 것 같습니다. Kinetis는 DigiKey의 신선 재고품이므로 잠금 해제되어 있지만 JLinkExe의 "kinetis unlock"명령도 오류나 유용한 정보없이 시간 초과됩니다.
이 시점에서 나는 어리석은 짓을하고 있다고 확신하지만 그것이 될 수있는 일을 잃어 가고 있습니다.
이 기기를 사용해 본 사람이 있습니까? 어떻게 프로그래밍합니까?
연습을 추가하려면 편집하십시오.
더 많은 정보 :
NMI # 핀이 재설정되지 않고 활성화되고 SIM_SOPT를 읽음으로써이를 확인했지만 활성화되면 내부 풀업이 있음을 읽었습니다. 이 특정 부분에서 PTB4는 핀 10에 있으며 내 디자인에는 연결되어 있지 않습니다. NMI 핀을 비활성화하면 아무런 차이가 없습니다. RST #는 비슷합니다. 핀을 접지하고 J-Link Lite로 이동하는 푸시 버튼에 연결되어 있지만 외부 풀업은 없습니다. NMI #처럼 RST # 핀에는 PTA5가 재설정되도록 구성 될 때 활성화되는 내부 풀업이 있기 때문에 중요하지 않습니다.
지금 클럭킹 확인 중 ... ICS는 FLL의 클럭 소스이고 ICS_C2의 BDIV는 001 (리셋 기본값)로 설정되어 있습니다. 올바르게 이해하면 32kHz 내부 발진기에 FLL에 1024를 곱한 다음 2로 나눠 ICSOUTCLK 32kHz * 1024/2 또는 16.8MHz를 의미합니다. ICS_S를 읽고 J-Link CLI를 통해 FLL이 잠겨 있는지 확인할 수 있습니다.
J-Link>mem8 40064004 1
40064004 = 50
(LOCK 및 IREFST가 설정되었습니다. 이것이 맞습니다.)
그런 다음 SIM_SCGC를 읽어 SIM에 플래시 컨트롤러에 대한 시계가 활성화되어 있는지 확인하십시오. SIM_BUSDIV의 BUSDIV가 0으로 설정되어 있는지 신속하게 확인할 수 있습니다. 이는 BUSCLK가 ICSOUTCLK와 동일한 주파수임을 의미합니다 (즉, 분할되지 않음).
J-Link>mem32 4004800c 1
4004800C = 00003000
J-Link>mem32 40048018 1
40048018 = 00000000
지금까지 모든 것이 잘 보입니다. BUSCLK는 16.8MHz이며 플래시 컨트롤러 클럭은 게이트되지 않습니다.
이제 플래시 컨트롤러로 넘어 갑시다. 재설정 중 FCLKDIV는 0이며 1MHz 클록이 필요합니다. KEA64RM의 표 18-2는 FDIV가 0x10으로 설정되어야 함을 보여줍니다.
재설정 중 :
J-Link>mem8 40020000 1
40020000 = 00
분배기를 설정하고 확인하는 것이 좋습니다.
J-Link>w1 40020000 10
Writing 10 -> 40020000
J-Link>mem8 40020000 1
40020000 = 90
FDIVLD가 설정되고 FDIV의 올바른 값이 표시됩니다.
너무 앞서 가기 전에 플래시가 보호되어 있지 않은지 확인하십시오.
J-Link>mem8 40020001 1
40020001 = FE
KEYEN = 11 (비활성화) 및 SEC = 10 (비보안). 확인. 장치가 비어 있는지 확인하십시오.
J-Link>mem8 40020006 1
40020006 = 80
J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 1
Writing 01 -> 4002000A
J-Link>mem8 40020006
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 83
여기서 FSTAT의 MGSTAT 비트는 블랭크 검사에 실패했으며 수정할 수없는 오류가 있음을 나타냅니다. 이상한. 직접 삭제 해 봅시다 :
J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 8
Writing 08 -> 4002000A
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 80
모두 지우기 명령이 성공했습니다. 이제 백지 수표를 시도해 보겠습니다.
J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 1
Writing 01 -> 4002000A
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 80
이제 백지 수표는 괜찮습니까?
이제 포기할 준비가되었습니다. 프로토 타입을 잃어 버리고 ST에서 온 프로세서를 사용해보세요. Kinetis 문서는 충분히 철저하지만 매우 조밀하며 시작하기가 매우 어렵습니다. 메모리 읽기를 통해 I / O를 흔들고 다른 주변 장치에 액세스 할 수는 있지만 플래시 컨트롤러의 문제를 파악할 수는 없습니다. 저는 20 년 넘게 마이크로 작업을 해왔으며 이런 어려움은 전에는 본 적이없는 것입니다.
20150102 편집 :
여전히 여기에 가지 마십시오. 나는 FRDM-KL25Z 평가 보드 (DigiKey에서 $ 15)를 실제로 구입했으며 Keith Wakeham의 블로그 에 따라 일반 CMSIS-DAP 소프트웨어를 OpenSDA 디버거에 넣고 J11을 잘라서 수정했습니다 . 간단한 프로그램을 실행하는 온보드 대상 (KL25Z)이있어 재설정 라인을 방해하지 않으며 OpenOCD가있는 SKEAZN64를보고 재생할 수는 있지만 불행히도 프로그래밍 할 수는 없습니다. Kinetis Design Studio (KDS) 소프트웨어는 보호되어 있고 대량 지우기를 수행해야한다고 말했기 때문에 Kinetis를 플래시하지 않습니다. 그러나 OpenOCD (KDS의 일부)는이 작업을 수행하는 방법을 모르는 것 같습니다. Mac에서 빌드 한 OpenOCD의 git 마스터 버전은 Kinetis를 이해하지만 특정 KEA 시리즈는 이해하지 못하므로 정사각형으로 돌아 왔습니다.
J-Link로 돌아가는 중 ...
@AdamHaun은 정말 좋은 단서를 가지고 있으며 J-Link 재설정 유형 (rsettype 명령)을 '6'(Kinetis) 유형으로 설정하면 J-Link는 코어를 재설정 한 후 워치 독을 비활성화해야합니다. WDOG_CS1 레지스터 (0x40052000)를 보면 그것이 사실이지만 주사위는없는 것으로 보입니다. 지우기 작업은 PC에서 0xfffffffe 및 오류 코드 -5에서 레일을 벗어나는 것처럼 보이며 "unlock kinetis"명령은 SIM_SOPT를 사용하여 재설정 핀을 비활성화 한 경우에만 작동합니다 (32 비트 값 0x00000008을 0x40048004로 기록). 불행히도 CPU를 다시 정지시킬 수 없다면 아마도 SWD 인터페이스가 재설정 라인을 사용하여 SWD DAP를 알려진 상태로 만들 수 없기 때문일 것입니다.
20150103 편집 :
깜박 거리는 LED가 있습니다
반복
깜박 거리는 LED가 있습니다
TL; DR 버전 : FRDM-KL25Z 보드 (USB 자체 이미지)에 USBDM 이미지를 넣고 ARM 프로그래머 독립형 앱을 사용하여 테스트 .elf를 보드로 보냅니다. 전원을 껐다 켜십시오.
긴 버전은 나중에 올 것입니다. 이제이 KEAZN64 보드 용 소프트웨어를 작성 및 디버깅하고, 이와 함께 제공되는 다른 소프트웨어의 수정 / 테스트를 마친 후 다른 클라이언트를위한 일부 문서 작업을 수행 할 시간이 48 시간 미만입니다. 나는 약속 합니다 상세한 답변이 질문을 업데이트합니다. 나는 단지 내 성공을 나누고 싶었다. 도와 주셔서 감사합니다. 나는 특히 당신에게 현상금을주고 싶습니다 때문에 개조와 이야기해야 할 수도 있습니다.