ฉันใช้ไมโครคอนโทรลเลอร์และไมโครโปรเซสเซอร์หลากหลายเป็นเวลาหลายปีแล้ว แต่ดูเหมือนว่าฉันจะรู้สึกทึ่งกับซีรี่ส์ Kinetis KE (โดยเฉพาะ S9KEAZN64AMLC)
17 มกราคม 2558 TL; DR:
Freescale ยืนยันว่า v2.0.0 ของซอฟต์แวร์ Kinetis Design Studio ของพวกเขาไม่ทำงานกับอุปกรณ์นี้ (รวมถึง eval board TRK-KEA64 ของตัวเอง) พวกเขาแนะนำให้ใช้ CodeWarrior MCU V10.6 ในขณะนี้
Segger ได้เปิดตัว v4.96a ("a" เป็นสิ่งสำคัญฉันใช้ v4.96) ซึ่งแก้ไขปัญหาและช่วยให้คุณใช้บอร์ดดีบักเกอร์ Segger J-Link Lite CortexM กับ KDS และมีความสามารถของโปรแกรม / การดีบักแบบเต็ม
ก่อนที่ Segger จะวางจำหน่าย v4.96a ฉันสามารถที่จะแฟลชชิปโดยทำการตั้งโปรแกรมดีบักเกอร์ OpenSDA ใหม่บนบอร์ด EVAL FRDM-KL25Z ราคาไม่แพง ($ 15) ของ Freescale โดย reflashing เฟิร์มแวร์ OpenSDA ที่มาพร้อมกับUSBDM (ใช้ v4.10.6.240) ฉันใช้ซอฟต์แวร์ "ARM โปรแกรมเมอร์" ของ USBDM แบบสแตนด์อโลน ฉันไม่ได้ใช้เวลามากในการพยายามแก้ไขข้อบกพร่องเนื่องจากฉันมีความเชี่ยวชาญเพียงพอในการดีบัก "oldschool" ซึ่งไม่จำเป็น โปรดตรวจสอบให้แน่ใจว่าคุณแฟลชโปรแกรม "ใจดี" ลงในเป้าหมายบนเครื่อง KL25 หรืออาจรบกวนการเขียนโปรแกรมเนื่องจากบรรทัดรีเซ็ตรีเซ็ตเป้าหมาย KL25 ของออนบอร์ดยังคงเชื่อมต่อกับดีบักเกอร์ OpenSDA แม้จะตัด J11 (ดูโพสต์บล็อกของ Keith Wakeham ลิงค์ด้านล่าง)
ขอบคุณมากสำหรับริชสไตเกอร์สำหรับการช่วยเหลือฉันอย่างจริงจังในการพิจารณาปัญหาและยืนยันการค้นพบของฉันทางอีเมล
ตอนนี้กลับไปที่คำถามที่เรากำหนดไว้เป็นประจำ:
ฉันได้สร้างบอร์ด 3.3V ที่เรียบง่าย มันมี LEDs บางตัวใน PTA การเชื่อมต่อ UART บน PTC และ SWD line นั้นอยู่ที่สายเฉพาะของพวกเขา ไม่มีอะไรแปลกหรือตลกเกี่ยวกับบอร์ดนี้
ฉันใช้ J-Link Lite สำหรับ Cortex-M (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 นั้นสมบูรณ์แบบ (ฉันสามารถอ่านและเขียนไปที่ nRF58122 SoC ซึ่งเป็นหน่วยประมวลผล Cortex-M0 อีกเครื่องหนึ่งด้วย) และดูเหมือนว่าอุปกรณ์จะทำงานได้ ฉันรู้ว่า Kinetis ถูกปลดล็อคเนื่องจากเป็นหุ้นใหม่จาก DigiKey แต่ถึงกระนั้นคำสั่ง "kinetis unlock" ใน JLinkExe ก็หมดลงโดยไม่มีข้อผิดพลาดหรือข้อมูลที่เป็นประโยชน์
เมื่อถึงช่วงเวลานี้ฉันมั่นใจว่าฉันกำลังทำอะไรที่โง่ แต่ฉันก็สูญเสียสิ่งที่อาจเป็นได้
มีใครเคยทำงานกับอุปกรณ์เหล่านี้มาก่อนหรือไม่ คุณเขียนโปรแกรมพวกเขาเป็นอย่างไร
แก้ไขเพื่อเพิ่มคำแนะนำ:
ข้อมูลเพิ่มเติมบางส่วน:
ฉันอ่านว่า NMI # pin เปิดใช้งานไม่ได้ตั้งค่าใหม่ (และตรวจสอบสิ่งนี้โดยการอ่าน SIM_SOPT) แต่ยังมีการดึงภายในเมื่อเปิดใช้งาน ในส่วนนี้ PTB4 อยู่บนขา 10 ซึ่งไม่ได้เชื่อมต่อในการออกแบบของฉัน การปิดใช้งานพิน NMI นั้นไม่แตกต่างกัน RST # คล้ายกัน มันเชื่อมต่อกับปุ่มกดที่เชื่อมต่อกับพินและไปที่ J-Link Lite แต่ไม่มีแรงดึงภายนอก สิ่งนี้ไม่สำคัญเพราะเช่น NMI # พิน RST # มีการดึงภายในที่เปิดใช้งานเมื่อกำหนดค่า PTA5 ให้รีเซ็ต
ดูการตอกบัตรในขณะนี้ ... จากการรีเซ็ต ICS เป็นแหล่งสัญญาณนาฬิกาของ FLL และ BDIV ใน ICS_C2 ถูกตั้งค่าเป็น 001 (ค่าเริ่มต้นการรีเซ็ต) ถ้าฉันเข้าใจถูกต้องนี่หมายความว่าออสซิลเลเตอร์ภายใน 32kHz นั้นคูณด้วย 1024 โดย FLL แล้วหารด้วย 2 ทำให้ ICSOUTCLK 32kHz * 1024/2 หรือ 16.8MHz ฉันสามารถตรวจสอบผ่าน J-Link CLI ว่า FLL ถูกล็อคโดยการอ่าน ICS_S:
J-Link>mem8 40064004 1
40064004 = 50
(ตั้งค่า LOCK และ IREFST ซึ่งถูกต้อง)
ฉันจะไปต่อเพื่อตรวจสอบว่า SIM ได้เปิดใช้งานนาฬิกาสำหรับตัวควบคุมแฟลชโดยอ่าน SIM_SCGC ฉันยังสามารถตรวจสอบได้อย่างรวดเร็วเพื่อให้แน่ใจว่า BUSDIV ใน SIM_BUSDIV ถูกตั้งค่าเป็นศูนย์ซึ่งหมายความว่า BUSCLK เป็นความถี่เดียวกับ ICSOUTCLK (นั่นคือมันไม่ได้ถูกแบ่งออก):
J-Link>mem32 4004800c 1
4004800C = 00003000
J-Link>mem32 40048018 1
40048018 = 00000000
จนถึงทุกอย่างดูดี BUSCLK คือ 16.8MHz และนาฬิกาตัวควบคุมแฟลชไม่ได้ถูกแบ่งให้ดู
ทีนี้มาดูตัวควบคุมแฟลชกันดีกว่า ออกจากการรีเซ็ต FCLKDIV เป็นศูนย์และเราต้องการนาฬิกา 1MHz ตารางที่ 18-2 ใน KEA64RM แสดงว่าควรตั้งค่า 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
ที่นี่เราเห็นว่าบิต MGSTAT ใน FSTAT บ่งชี้ว่าการตรวจสอบว่างเปล่าล้มเหลวและยังพบข้อผิดพลาดที่ไม่สามารถแก้ไขได้ แปลก ลองลบด้วยตนเอง:
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 ผ่านการอ่านหน่วยความจำและเข้าถึงอุปกรณ์ต่อพ่วงอื่น ๆ แต่ฉันไม่สามารถคิดได้ว่าตัวควบคุมแฟลชใช้งานได้นานเท่าไร ฉันทำงานกับ micros มานานกว่า 20 ปีและความยากลำบากแบบนี้เป็นสิ่งที่ฉันไม่เคยพบมาก่อน
แก้ไข 20150102:
ยังคงไม่ไปที่นี่ ผมได้ซื้อจริง EVAL คณะกรรมการ frdm-KL25Z ($ 15 จาก Digikey) และแก้ไขได้โดยการวางซอฟต์แวร์ CMSIS-DAP ทั่วไปในการดีบักเกอร์ OpenSDA และตัด J11 ตามบล็อกคี ธ Wakeham ของ ฉันมีเป้าหมายแบบออนบอร์ด (KL25Z) ที่รันโปรแกรมอย่างง่ายดังนั้นจึงไม่รบกวนการรีเซ็ตบรรทัดและฉันสามารถดู SKEAZN64 ของฉันกับ OpenOCD และเล่นกับมัน แต่น่าเสียดายที่มันไม่สามารถตั้งโปรแกรมได้เช่นกัน ซอฟต์แวร์ Kinetis Design Studio (KDS) จะไม่กะพริบ Kinetis ของฉันเพราะมันบอกว่ามันได้รับการป้องกันและฉันต้องทำการลบจำนวนมาก แต่ OpenOCD (เป็นส่วนหนึ่งของ KDS) ดูเหมือนจะไม่รู้วิธีการทำเช่นนี้ รุ่นต้นแบบ git ของ OpenOCD ที่ฉันสร้างขึ้นบน Mac ของฉันเข้าใจ Kinetis แต่ไม่ใช่ซีรีส์ KEA ที่เฉพาะเจาะจงดังนั้นฉันจึงกลับไปที่จตุรัสหนึ่ง
กลับไปที่ J-Link ...
@ AdamHaun มีเงื่อนงำที่ดีจริง ๆ และถ้าฉันตั้ง J-Link รีเซ็ตประเภท (คำสั่ง rsettype) เพื่อพิมพ์ '6' (Kinetis) J-Link ควรจะปิดการใช้งานจ้องจับผิดหลังจากรีเซ็ตแกน มองไปที่การลงทะเบียน WDOG_CS1 (0x40052000) ปรากฏว่าเป็นกรณี แต่ก็ยังไม่มีลูกเต๋า การดำเนินการลบดูเหมือนว่าจะปิดทางรถไฟด้วยพีซีที่ 0xfffffffe และรหัสข้อผิดพลาด -5 และคำสั่ง "ปลดล็อก kinetis" จะทำงานได้ก็ต่อเมื่อฉันปิดการใช้งานพินรีเซ็ตโดยใช้ SIM_SOPT (โดยเขียนค่า 32 บิต 0x00000008 ถึง 0x40048004) น่าเสียดายถ้าฉันทำเช่นนั้น CPU จะไม่สามารถหยุดอีกครั้งสันนิษฐานได้เพราะอินเตอร์เฟส SWD ไม่สามารถใช้สายรีเซ็ตเพื่อบังคับให้ SWD DAP เข้าสู่สถานะที่เป็นที่รู้จัก
แก้ไข 20150103:
ฉันมีไฟ LED กระพริบ
ซ้ำ
ฉันมีไฟ LED กระพริบ
TL; DR เวอร์ชัน: ใส่อิมเมจ USBDM บนบอร์ด FRDM-KL25Z (เรื่องราวทั้งหมดเป็นของตัวเอง) ใช้แอป ARM โปรแกรมเมอร์แบบสแตนด์อโลนเพื่อส่งการทดสอบด้วยตัวเองไปยังบอร์ด วงจรไฟฟ้าและvoilà
รุ่นยาวจะมาในภายหลัง ตอนนี้ฉันมีเวลาน้อยกว่า 48 ชั่วโมงในการเขียนและตรวจแก้จุดบกพร่องซอฟต์แวร์สำหรับบอร์ด KEAZN64 นี้เสร็จสิ้นการแก้ไข / ทดสอบซอฟต์แวร์อื่น ๆ ที่เข้ากันได้และทำงานกับเอกสารบางอย่างสำหรับไคลเอ็นต์อื่น ฉันสัญญาว่าฉันจะอัปเดตคำถามนี้พร้อมคำตอบโดยละเอียด ฉันแค่อยากจะแบ่งปันความสำเร็จของฉัน ขอบคุณทุกคนสำหรับความช่วยเหลือของคุณ ฉันอาจต้องพูดคุยกับ mods เพราะฉันต้องการมอบเงินรางวัลให้กับคุณโดยเฉพาะ