Freescale Kinetis KE-플래시 쓰기


12

나는 여러 해 동안 다양한 마이크로 컨트롤러와 마이크로 프로세서를 사용해 왔지만 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 시간 미만입니다. 나는 약속 합니다 상세한 답변이 질문을 업데이트합니다. 나는 단지 내 성공을 나누고 싶었다. 도와 주셔서 감사합니다. 나는 특히 당신에게 현상금을주고 싶습니다 때문에 개조와 이야기해야 할 수도 있습니다.


바보 같은 질문이지만 올바른 j-link 라이트를 사용하고 있습니까? 하나의 플랫폼으로 제한됩니다. 잘못된 것을 직접 사용하지는 않았지만 이것이 실패 할 것으로 예상됩니다.
Scott Seidman

여기에 j-link와 kinetis 태그에 실제로 내용이없는 경우 (단 하나의 다른 질문), 제조업체의 지원 포럼이나 전자 메일, 전화 지원 등을 찾아보십시오 . forum.segger.com ?
Fizz December

community.freescale.com/community/kinetis 는 사람들이 이에 대해 잘 알고있는 또 다른 장소입니다. community.freescale.com/thread/337779 는 귀하의 질문이 아니라면 매우 유사한 것으로 보입니다 ...
Fizz

1
@RespawnedFluff 나는 Kinetis 포럼에 실제로 거의 동일한 질문이 있습니다 : community.freescale.com/message/466015 . e.se는 더 많은 도달 거리를 가지고 있으며이 커뮤니티 / 사이트를 선호하므로 여기에서도 물어 보는 것이 아프지 않을 것이라고 생각했습니다.
akohlsmith

1
@RespawnedFluff 특정 J-Link 버전을 포함하도록 질문을 업데이트했습니다. OEM 전용이 아니며 직접 "모든 Cortex-M0 / M0 + / M1 / ​​M3 / M4 / M7 코어 지원"이라고 명시되어 있습니다.
akohlsmith

답변:


3

실제로 절차에서 논리적 오류를 찾을 수는 없지만 몇 가지 제안 사항이 있습니다.

  • 4002_0007h에 FTMRH_FERSTAT 레지스터도 있습니다. 무엇이 잘못되었는지 알려 주지만 패리티 (또는 이중 패리티 오류)의 경우에만 가능합니다. 나는 이것이 어떤 경우라도 기록하거나 오류를 지우지 않을 것이라고 확신하지는 않지만 아마도 체크 아웃 할 가치가 있습니다.

  • 또한 KEA 문서에는 플래시 오류 ( "18.3.5 플래시 및 EEPROM 인터럽트"섹션)에 의해 인터럽트가 트리거 될 수 있다고 언급되어 있습니다. SEGGER가 지울 때 어떤 일이 발생하는지는 모르겠지만 FSTAT 레지스터에 오류가 표시되어 PC가 왜 변경되는지에 대한 그럴듯한 설명입니다. 불행히도 인터럽트 컨트롤러에 대한 KEA 설명서 섹션 ( "3.3.2 NVIC (Nested Vectored Interrupt Controller) 구성")은 전체 설명서를 보려면 ARM 웹 사이트의 방향을 모호하게 가리 킵니다. 플래시 오류에 대한 기본 인터럽트 처리기 (부팅시)가 설정되어 있는지 확인할 수 없습니다.

  • 섹터 레벨에서만 수동으로 지우기를 수행 했으므로 수동으로 (적절한 레지스터를 직접 작성하여) 전체 플래시 지우기 명령을 실행하십시오. 단일 명령으로이 작업을 수행하는 유일한 방법은 설명서의 18.3.9.10 (246 페이지 참조)에 설명 된 "보안되지 않은 플래시 명령"인 것 같습니다. 이렇게하면 장치가 "비보안"상태가되고 완전 플래시 및 EEPROM이 지워집니다. FSTAT 비트 (CCIF)를 폴링하여 완료된 시점을 확인하고 나중에 오류 플래그를 다시 확인할 수 있습니다. 편집 : 매뉴얼에 "18.3.9.7 모든 블록 지우기 명령"섹션도 있습니다.

  • 더 낮은 버스 클럭 주파수를 시도하십시오. 0.8 Mhz 이상은 문서에 따라 작동합니다. Freescale 포럼에는 외부 플래시가 제대로 작동했지만 여전히 문서화 된 범위에있는 특정 주파수를 초과하지 않는 스레드가 하나 있기 때문에 이것을 제안하고 있습니다. 따라서 칩의 플래시 컨트롤러가 결함이있을 수 있으며 명시된 범위의 전체 주파수에서 작동 할 수 없습니다.

  • 마찬가지로, 당신의 다른 칩. 이 비용 (약 $ 3)이 얼마인지에 따라 나쁜 비용이 든다는 것은 상상할 수없는 일입니다. 대부분의 방식으로 잘 작동하지만 특정 보호 모드 명령에서 이상한 오류가 발생한 내장 x86 칩이 있다는 것을 기억합니다. 내 문제는 같은 제조업체의 다른 장치로 사라졌습니다. 프리 스케일에 이러한 장치에 대한 스테핑과 정오표가 있는지 여부는 명확하지 않습니다.

이 페이지에서 다른 사람들이 말하지 않은 디버깅 제안과 관련하여 내가 생각할 수있는 전부입니다.

20150103 편집 :

(내 의견에서 여기로 이동 한 자료 및 확장)

모든 Kinetis 시리즈가 (공식적으로는) 모든 플래셔에서 테스트되는 것은 아닙니다. 실제로 사용중인 상당히 새로운 EA 시리즈는 공식적으로 Freescale의 자체 / OEM Cyclone MAX 자동 점멸 장치에서만 지원되는 것으로 보입니다. EA serires의 프리 스케일 페이지에 나열된 유일한 제품 입니다. 이제 KL0과 같은 이전 Kinetis의 경우 SEGGER를 포함 하여 목록이 훨씬 길어졌습니다 . EA 시리즈에 대한 다른 플래셔의 테스트 부족 때문인지 또는 Cyclone MAX 만 현재 알고있는 프로그래밍 문제가 실제로 있는지는 알 수 없습니다. 어쩌면 이것이 Freescale이 다른 자동 점멸 장치를 나열하는 데 느리기를 바라고 있었지만 J-link 매뉴얼 을 확인했을 때 (바람직하게는 올바른 것), 테스트 된 Kinetis E 또는 EA 시리즈 (249 페이지)는 없지만 Kinetis K10 ~ K60 장치 (및 일부 구형 MAC7) 만 있습니다.

Cyclone MAX 용 PExDrv 소프트웨어 / 펌웨어에는 2014 년 3 월 20 일자 서비스 팩 (v10.3)이 있으며 "MKE04Z64, MKE04Z128, MKE06Z64, MKE06Z128, SKEAZ64 및 SKEAZ128 파생물에 대한 지원이 추가되었습니다 ." 또 다른 단서는 Kinetis를위한 Freescale의 자체 오픈 소스 부트 로더 / 플래시 로더 소프트웨어라는 것입니다, 2014 년 12 월에 훨씬 더 최근에 업데이트되었지만, E 또는 EA 계열 장치는 지원되는 것으로 표시되지 않습니다. E / EA 시리즈와 K10과 같은 다른 Kinetis 사이의 플래시와 관련하여 충분히 다른 점이 있다고 생각합니다.하지만 그 차이점이 정확히 무엇인지 모르겠습니다. 따라서 EA 플래시가 Cyclone MAX 이외의 다른 기기에서 자동으로 작동 할 것으로 기대하는 것은 현재로서는 비현실적이라고 생각합니다. EA 시리즈 문서에서 "베어 메탈"레벨 (직접 레지스터 명령)로 수행하는 방법을 알아낼 수는 있지만 문서가 매우 애매하다는 데 동의합니다. 그것은 단지 참조 매뉴얼 인 단계별 지침이 부족합니다. 프리 스케일의 오픈 소스 부트 로더 / 플래시 로더가 E / EA 시리즈를 지원했다면

FRDM-KL25Z (Kinetis L 시리즈와 함께 제공)를 사용한 실험은 같은 방향으로 진행됩니다. 즉, L 시리즈를 EA 시리즈와 교체 할 수없고 동일한 플래셔 (이 경우 OpenSDA)를 사용할 수 없습니다.

그리고 만약 당신이 "프로그래머에게 $ 100 달러를 생각하는 것이 터무니 없다"고 생각하는 Keith (블로거)와 같다면 아마도 Cyclone에 $ 900 +를 떨어 뜨리는 것에 만족하지 않을 것입니다. 프리 스케일이 자동차 고객을 쫓아 내기 위해 의도적으로이 작업을 수행하는지 또는 무엇을해야하는지 모르겠습니다 ... 대부분의 Kinetis 시리즈 툴링이 E / EA에서 작동하지 않는 것은 당연합니다.

또한 OpenSDA의 플래싱 기능은 MS Windows에서만 작동 한다는 것을 명심하십시오 .

더 많은 보드를 기꺼이 시도하려는 경우 E- 시리즈 Kinetis가있는 보드가 더 좋습니다. 예 : FRDM-KE02Z (Digi-Key에서 $ 13); 또한 OpenSDA를 사용하므로 해킹이 가능할 수 있습니다. 내가 알 수있는 한 그들은 EA 시리즈로 보드를 만들거나 팔지 않습니다. 그러나 두 프로세서가 동일한 (예 : L) 시리즈이지만 숫자가 다른 경우에도 하나의 OpenSDA 프로세서 / 보드를 사용하여 자체 보드의 것과 다른 Kinetis 유형을 프로그래밍 할 수없는 것 같습니다 . 불행히도 OpenSDA에서 "Open"은 SDA 스펙이 개방되어 있음을 의미하며 소스 코드를 공개 소스로 제공하지는 않습니다. E 시리즈 플래시를 프로그래밍하기위한 소스 코드조차 찾을 수 없습니다. 분명히, 나는 그것에 대해 반쯤 맞았습니다. OpenSDA v1은 공개 소스가 아니지만 v2는 입니다.

OpenSDAv2의 결론 은 다음과 같습니다 . 기본적으로 CMSIS-DAP / mbed 부트 로더 및 플래셔입니다. 따라서 v1과 동일한 기능을 갖지 않거나 동일한 칩을 지원 하지 않을 수 있습니다 ... flash_features.h 는 SKE (EA-series)는 물론 MKE ( Kinetis E-series)를 나열하지 않기 때문에 실제로 그럴 것입니다. 장치. EA 시리즈에 대한 프리 스케일의 제안은 다음과 같습니다. 900 달러짜리 싸이 클론 플래셔를 구입하거나 우리가 출시 한 불완전한 오픈 소스 비트에서 직접 작성하는 행운을 빕니다.

그러나 최소한 E 시리즈 Kinetis, 즉 USBDM을 프로그래밍 할 수있는 오픈 소스 프로젝트가 있음이 밝혀졌습니다 . 변경 로그 에서 관련 비트 는 다음과 같습니다.

V4.1.6.140 (2014 년 4 월)

추가 Kinetis 장치 (MKE04, MKE06, MK64F)

  • MKE 장치 수정 (대량 삭제 후를 제외하고 프로그램 실패)

그리고이 로그 항목을 기반으로 E 시리즈는 기발한 것으로 보입니다. EA 시리즈 (SKE)를 직접 지원하지는 않지만, 자신의 플래셔를 해킹하려는 경우 해당 코드 기반이 가장 좋습니다. 또는 USBDM의 작성자가 EA 시리즈 (SKE) 지원을 추가하도록 설득 할 수 있습니다. USBDM을위한 하드웨어로서 이미 획득 한 FRDM-KL25Z를 사용할 수 있습니다 . 그러나 SKE 칩을 지원하려면 여전히 USBDM 소프트웨어를 해킹해야합니다.

USBDM마스터 구성 파일 은 다소 까다로워 보입니다. USDBM에서는 서로 다른 MKE 시리즈 장치에 다른 플래셔 (코드베이스)가 사용됩니다. "KETM 및 MKE06에는"FTMRE "가 사용되지만 MKE02에는"FTMRH "가 사용됩니다. 두 개의 코드베이스를 간략히 살펴보면 FTRME 코드가 아닌 FTRMH 코드베이스를 원할 것입니다. 후자는 SKEA64 장치와 다른 FTMRH 구조를 가지고 있습니다. 예를 들어 클럭 분배기는 첫 번째 필드가 아니라 네 번째 필드입니다. FTRME는 또한 버스 FIDV를 0x17 = 24Mhz로 설정하는데, 이는 칩의 범위를 벗어난 것으로 보입니다 (KEA64 매뉴얼의 224 페이지는 최대 20Mhz를 나타냄). FTMRH는 그것을 0x0F = 16Mhz (당신처럼)로 설정합니다.

이 시점에서 (Cyclone MAX를 구매하지 않는 한) 가장 좋은 방법은 Podonoghue에 연락하여 칩을 코드베이스와 함께 사용하는 것입니다. 그는 (프리 스케일 포럼에서) 새로운 기기를 적극적으로 도와 줄 것 같습니다 .

또한 USDBM 소스 코드에서 SEGGER가 자체 펌웨어 업데이트를 먼저 얻지 않으면 SEGGER가 SKEA를 올바르게 플래시 할 수있는 방법이 없다고 예언 할 수 있습니다. 내가 왜 그렇게 말합니까? USDBM의 FTMRH 코드베이스는 정확히 하나의 장치에서 사용되기 때문에 SEGGER는 MKE02를 사용합니다 (매뉴얼 기준). Kinetis L 및 K 시리즈와 같은 기타 일반적인 장치는 "FTFA"코드 기반을 기반으로 다른 USDBM 자동 점멸 장치를 사용합니다. 당신이 보는 경우 FTFA의 코드를 (또한 0x40020000에서 시작) 플래시 컨트롤러 레지스터 구조는이 다릅니다; 첫 번째 필드는 클럭 디바이더가 아니라 통계 레지스터 등 프리 스케일이 호환되지 않는 장치를 만드는 "훌륭한"방법입니다.하지만 플래시 제작자에게는 도움이 될 것입니다.


1
FERSTAT는 의심 한대로 유용한 것을 보여주지 않습니다. 나는이 전체 혼란에서 일찍 그것을 시도했다. 모든 플래시 인터럽트는 기본적으로 비활성화되어 있지만 이것이 문제의 일부인지 확인했습니다. 주사위도 없습니다. 나는 두 개의 보드를 가지고 있으며 둘 다 같은 방식으로 행동하지만 실리콘이 실제로 비난하는 시간이 거의 없다는 사실을 수년 동안 배웠습니다. :-)
akohlsmith

나는 주파수를 떨어 뜨리려고 노력할 것이다. 재설정되지 않은 기본값은 16.78MHz 버스 클럭 (32kHz * 1024/2)에 대한 것으로 보이므로 0x10 (32kHz * 1024/2 / 16은 1.048MHz의 플래시 클럭 분배기를 선택했지만 사양 내에 있지만 아마도 조금 가장자리에 가까운)
akohlsmith

1
모두 삭제 (0x8) 대신 unprotect 명령 (0xb)에 대한 다른 제안은 성공하지만 나중에 CPU를 중지 할 수 없으며 나중에 플래시로 프로그래밍 할 수없는 것 같습니다.
akohlsmith

이 인터넷 낯선 사람을 돕기 위해 최선을 다해 주셔서 감사합니다. 지원되는 프로그래머 (J-Link 및 CMSIS-DAP)와 프리 스케일 자체 개발 환경 및 툴을 사용할 때에도이 칩을 사용하기 어려운 이유를 이해하려고 애 쓰고 있습니다. 내 마음을 불고있다.
akohlsmith

자세한 조사와 지속적인 도움에 감사드립니다. 실제로 이것은 내가 한 일입니다. FRDM-KL25Z를 USBDM 펌웨어 및 독립형 ARM 플래셔와 함께 사용하십시오. 이것이 장치에서 깜박이는 LED 테스트를 얻은 것입니다. 궁금한 점은 Segger 지원 CPU 목록에 SKEAZN64xxx2가 명시 적으로 언급되어 있지만 작동하지 않는다는 것입니다.
akohlsmith

2

: 당신이 시도해 봤어 SEGGER J-링크와 잠금 해제 및 지우기 플래시를

주장에 따르면

Segger J-Link를 사용하여 보호 된 FLASH 섹터를 다시 프로그래밍하려면 먼저 장치를 잠금 해제하고 대량으로 삭제해야합니다. 이를 위해, 장치를 보호 해제하고 지우는 명령 행 인터페이스가있는 J-Link Commander 유틸리티가 있습니다. 지우는 경우에만 J-Flash (및 Lite)는 특히 '깨끗한'장치 메모리를 얻는 데 매우 유용한 도구입니다.

내가 흥미로운 점은 잠금을 영구적으로 유지하려면 잠금을 해제하고 다음 단계에서 삭제해야한다는 것입니다.

그러나 잠금을 해제 한 다음 지우려면 영구적으로 만들어야합니다. 장치를 지우려면 동일한 명령 줄 유틸리티를 사용할 수 있습니다. 그러나 먼저 장치 이름을 지정한 다음 장치 이름을 지울 수 있습니다 (KL25Z의 예).

EDIT1 : 잘못된 데이터가 추가되었습니다.

EDIT2 : FSEC (Flash Security) 레지스터를 읽을 수 있습니까? 시도해 보았 니?

EDIT3 : Kinetis 보안 및 플래시 보호 기능 사용, 개정 1, 6/2012

디버거 / JTAG를 통한 대량 지우기 디버거 및 JTAG 도구는 프로세서가 보호 될 때 장치에 대한 액세스가 매우 제한적입니다. JTAG를 통해 액세스 할 수있는 유일한 레지스터는 MDM-AP 상태 및 제어 레지스터입니다. 디버그 도구가 부품의 보안을 해제 할 수 있도록 MDM-AP 제어 레지스터의 비트 0을 설정하여 프로세서의 대량 지우기를 요청할 수 있습니다. 이 방법을 사용하여 보안을 비활성화하려면 대량 삭제 기능을 허용하기 위해 FSEC [MEEN]을 10 이외의 값으로 설정해야합니다. 대량 삭제가 비활성화 된 경우 FSEC [MEEN] = 10이면 대량 삭제 요청이 플래시에서 무시되며이 방법을 사용하여 장치의 보안을 해제 할 수 없습니다. 많은 디버거는 MDM-AP 상태 레지스터의 비트 2를 자동으로 사용하여 연결을 시도 할 때 장치의 보안 여부를 결정합니다. 디버거 팝업 창을 사용하여 장치가 보호되었음을 알리고 장치 보안을 해제하기 위해 대량 지우기를 원하는지 묻습니다. 대량 지우기가 완료되고 확인되면 보안이 비활성화됩니다. 일부 디버거는 대량 삭제가 완료된 후 플래시가 보안되지 않은 상태가되도록 플래시 구성 필드를 자동으로 프로그래밍 할 수 있습니다 (FSEC = 0xFE).

또한 MDM-AP 레지스터를 읽거나 쓰려고 할 때 다른 kinetis 제품군에 다른 RESET 신호 조작이 필요하다고 언급 한 게시물을 우연히 발견했습니다.

EDIT4 : SWD_DIO에 강력한 풀업을 추가하려고 했습니까? 어둠 속에서 촬영되었지만 프리 스케일이 권장합니다.


시간을내어 교차 점검하고 제안하는 데 도움을 주셔서 감사합니다. FTMRH_FSEC (0x40020001)는 0xfe의 값을 반환합니다.이 값은 잠금 해제 / 안전하지 않은 값입니다. 0x0000400c에서 플래시를 읽는 경우 동일한 값을 나타내는 보안 비트도 볼 수 있습니다 (FSEC의 전원을 켤 때 재설정되는 값). J-Link> mem8 400 10 00000400 = FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FE FF
akohlsmith

J-Link에는 재설정시 워치 독 타이머를 비활성화하는 특정 Kinetis 값 (6)을 가진 "rsettype"명령이 있습니다. 프로세서는 멈추지 않지만 "h"명령으로 처리 할 수 ​​있습니다. 또한 rsettype 6을 사용하지 않으면 워치 독 레지스터가 워치 독이 활성화되었다고보고하고 문서와 일치한다는 것을 알 수 있습니다.
akohlsmith

풀업을 시도해 보았습니다. 두 보드 모두 가지고 있지 않으며 이것이 작동하지 않으면 Jlink는 NOK입니다.
iggy

나는 풀업을 시도했지만 (4.7k, 얼마나 "강한"강해야하는지 잘 모르겠다) 아무런 차이가 없었다.
akohlsmith

4k7은 괜찮습니다. 당신은 당신이 할 수있는 모든 것을했습니다. 이 시점에서 FRDM-KL25Z로 동작을 확인한 다음 Jlink 녀석에게 백만 개의 티켓을 보냅니다.
iggy

1

먼저 프로세서를 정지시켜야합니다. 실행중인 프로세서의 증상이 나타납니다. 나는 openocd를 사용한다; 장치를 플래싱하기 전에 "reset halt"명령을 사용합니다. "halt"는 "reset"의 하위 명령으로, 재설정 후 즉시 중지되며 독립형 중단 명령도 있습니다.

"정지 정지"명령을 찾으십시오. 제 생각에 벡터의 사전 초기화 상태에 도달해야하기 때문에 정지만으로는 충분하지 않습니다.


귀하의 의견에 감사드립니다. 그러나 segger는 CPU를 먼저 정지시킵니다. 또한 변경없이 이러한 명령을 실행하기 전에 CPU를 수동으로 중지하려고 시도했습니다. 나는 내 질문에 그것을 분명히해야했다.
akohlsmith

벡터를 초기화하기 전에 정지해야 할 필요가 있다는 것을 알지 못했습니다. 그것을 조사했지만 왜 그것이 필요한지 이해하는 데 어려움을 겪고 있습니다. 힌트를 주셔서 감사합니다. 모든 비트가 도움이됩니다
akohlsmith

1

아직 언급하지는 않았으므로 계속해서이 부분에 재설정시 활성화 된 캐시가 있다는 문제가있을 것입니다. 이것은 백지 검사로 관찰 한 "이상한"동작과 일치합니다. 기본 플래시는 업데이트되었지만 캐시는 업데이트되지 않았습니다. 이 문제를 해결하려면 MCM_PLACRat 에 기록하여 데이터 및 명령 캐시를 모두 끄고 캐시를 F000_300Ch지우십시오. 이 같은 이상한 행동은 Segger를 혼동했을 것입니다.


이것은 매우 좋은 제안이었습니다. 재설정시 MCM_PLACR은 0x00000850으로 읽히는 데 약간 이상합니다 (데이터 캐시가 비활성화되었지만 비트 6 및 4는 설명서에 예약되어 있음). 나는 모든 것을 (비전, 컨트롤러 캐시, 명령 캐싱) 비활성화하고 0x0000bc00을 작성하여 캐시를 지우려고했습니다. 0x0000b850을 다시 읽지 만 동작에는 변화가 없습니다.
akohlsmith

이 문제를 마침내 해결하면 청각에 매우 관심이 있습니다. 한편,이 칩은 조만간 내 디자인에 포함 되지 않을 것입니다. 고통을 끼쳐 드려 죄송하지만 흥미로운 질문을 공유해 주셔서 감사합니다.
Edward

0

오류 메시지는 PC 값에 관한 것이므로 CPU가 레일에서 어딘가로 나가는 것처럼 들립니다. 이것은 긴 샷이지만 워치 독 타이머를 비활성화하려고 했습니까?


그것은 훌륭한 제안이었습니다. 나는이 이론을 테스트하면서 당신의 답을 읽은 후 시간을 보냈다. 그러나 "device skeazn64xxx2"를 실행할 때 J-Link가 이미이를 고려하여 재설정 후 워치 독을 비활성화 한 것으로 보입니다. 전원주기 사이에 장치를 지정하거나 지정하지 않고 WDOG_CS1 레지스터를 확인하여이를 확인했습니다. :-(
akohlsmith

흠… 좋아, 내가 알아 차린 다른 것은 당신이 백지 점검 중에 수정 가능한 오류가 있다는 것입니다. J-Link가 플래시 ECC를 비활성화합니까? 그렇지 않으면 리드 백 확인에 문제가 생길 수 있으며 예기치 않은 인터럽트가 발생할 수도 있습니다. (저는 Freescale MCU에 익숙하지 않지만 이런 종류의 동작은 매우 일반적이라고 생각합니다.)
Adam Haun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.