मैं कई वर्षों के लिए कई माइक्रोकंट्रोलर और माइक्रोप्रोसेसरों का उपयोग कर रहा हूं, लेकिन अब मैं किनेटिस केई श्रृंखला (विशेष रूप से S9KEAZN64AMLC) द्वारा स्तब्ध प्रतीत होता हूं।
17 जनवरी, 2015 टीएल; डीआर:
फ्रीस्केल की पुष्टि है कि उनके Kinetis डिजाइन स्टूडियो सॉफ्टवेयर के v2.0.0 इस डिवाइस (अपने स्वयं के TRK-KEA64 eval बोर्ड सहित) के साथ काम नहीं करता है। वे फिलहाल कोडवर्ड एमसीयू वी 10.6 का उपयोग करने की सलाह देते हैं।
सेगर ने v4.96a जारी किया है ("a" महत्वपूर्ण है, मैं v4.96 का उपयोग कर रहा था) जो इस समस्या को ठीक करता है और आपको केडीएस के साथ सेगर जे-लिंक लाइट कोर्टेक्स एम डीबगर बोर्ड का उपयोग करने और पूर्ण कार्यक्रम / डिबग क्षमता रखने की अनुमति देता है।
इससे पहले कि Segger ने v4.96a जारी किया, मैं Freescale की सस्ती ($ 15) FRDM-KL25Z eval बोर्ड पर OpenSDA डिबगर को रीप्रोग्राम करके चिप को फ्लैश करने में सफल रहा, OpenSDA फर्मवेयर को फिर से शुरू करके USBDM (v4.10.6.240 का उपयोग करके) के साथ आता है । मैंने तब USBDM के स्टैंडअलोन "ARM प्रोग्रामर" सॉफ़्टवेयर का उपयोग किया। मैंने डिबगिंग को काम करने में ज्यादा समय नहीं दिया, क्योंकि मैं "ओल्डस्कूल" डिबगिंग में पर्याप्त कुशल हूं ताकि इसकी जरूरत न पड़े। कृपया सुनिश्चित करें कि आप ऑन-बोर्ड लक्ष्य KL25 में एक "सौम्य" प्रोग्राम को फ्लैश करते हैं या यह प्रोग्रामिंग में हस्तक्षेप कर सकता है क्योंकि ऑन-बोर्ड लक्ष्य KL25 की रीसेट लाइन अभी भी J11 कट के साथ OpenSDA डिबगर से जुड़ी हुई है (देखें विथ वेखम के ब्लॉग पोस्ट , नीचे दिया गया)।
एक बहुत ही बहुत धन्यवाद के लिए Erich स्टाइलर ने मुझे इस समस्या को हल करने में मदद की और ईमेल पर मेरे निष्कर्षों की पुष्टि की।
अब हमारे नियमित रूप से निर्धारित प्रश्न पर वापस:
मैंने एक बेवकूफ-सरल 3.3V ब्रेकआउट बोर्ड बनाया है। यह पीटीए पर कुछ एलईडी, पीटीसी पर एक UART कनेक्शन और SWD लाइनें उनके समर्पित लाइनों पर हैं। इस बोर्ड के बारे में शाब्दिक या मजाकिया कुछ भी नहीं है।
मैं Cortex-M (J-Link LITE CortexM-9 के लिए J-Link लाइट का उपयोग कर रहा हूं, https://www.segger.com/jlink-lite-cortexm.html देखें ) और OSX और Windows दोनों के तहत मुझे मिलता है एक ही परिणाम: जे-लिंक कमांडर उपयोगिता चिप की पहचान कर सकती है, मैं 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.
जे-लिंक लाइट पूरी तरह से ठीक है (मैं nRF58122 SoC को पढ़ सकता हूं और इसके साथ एक और कॉर्टेक्स- M0 प्रोसेसर लिख सकता हूं) और डिवाइस अन्यथा काम करने लगता है। मुझे पता है कि काइनेटिस को डिजीके से ताजा स्टॉक फैक्ट्री के रूप में अनलॉक किया गया है, लेकिन फिर भी JLinkExe में "किनेटिस अनलॉक" कमांड किसी भी त्रुटि या उपयोगी जानकारी के बिना है।
इस समय में मुझे यकीन है कि मैं कुछ बेवकूफी कर रहा हूं, लेकिन मैं इसके नुकसान पर हूं।
क्या किसी ने इन उपकरणों के साथ पहले काम किया है? आप उन्हें कैसे प्रोग्रामिंग कर रहे हैं?
walkthrough जोड़ने के लिए संपादित करें:
कुछ और जानकारी:
मैंने पढ़ा कि NMI # पिन को रीसेट से सक्षम किया गया है (और SIM_SOPT को पढ़कर इसे सत्यापित किया गया है) लेकिन यह भी सक्षम होने पर आंतरिक पुल-अप है। इस विशेष भाग पर पीटीबी 4 पिन 10 पर है जो मेरे डिजाइन में एक नो-कनेक्ट है। NMI पिन को अक्षम करने से कोई फर्क नहीं पड़ता है। RST # समान है; यह एक पुशबटन से जुड़ा है जो पिन को आधार बनाता है और जे-लिंक लाइट को भी जाता है लेकिन कोई बाहरी पुलअप नहीं है। यह इसलिए मायने नहीं रखता क्योंकि NMI # की तरह, RST # पिन में एक आंतरिक पुलअप है जो सक्षम है जब PTA5 को रीसेट होने के लिए कॉन्फ़िगर किया गया है।
अब क्लॉकिंग को देखते हुए ... रीसेट से, ICS, FLL और BDIV का क्लॉक सोर्स है ICS_C2 में 001 (रिसेट डिफ़ॉल्ट) पर सेट है। अगर मैं सही ढंग से समझूं, इसका मतलब है कि 32kHz आंतरिक थरथरानवाला को FLL द्वारा 1024 से गुणा किया जाता है और फिर 2 से विभाजित किया जाता है, जिससे ICSOUTCLK 32kHz * 1024/2 या 16.8MHz बनता है। मैं जे-लिंक सीएलआई के माध्यम से सत्यापित कर सकता हूं कि आईसीएल_एस पढ़ने से एफएलएल लॉक हो गया है:
J-Link>mem8 40064004 1
40064004 = 50
(लॉक और IREFST सेट हैं, यह सही है।)
मैं तब यह सत्यापित करने के लिए आगे बढ़ता हूं कि सिम में सिम नियंत्रक के लिए फ्लैश नियंत्रक के लिए सक्षम घड़ी है। मैं यह भी सुनिश्चित कर सकता हूं कि SIM_BUSDIV में BUSDIV शून्य पर सेट है, जिसका अर्थ है कि BUSCLK ICSOUTCLK के समान आवृत्ति है (अर्थात यह विभाजित नहीं किया जा रहा है):
J-Link>mem32 4004800c 1
4004800C = 00003000
J-Link>mem32 40048018 1
40048018 = 00000000
अब तक, सब कुछ ठीक लग रहा है। BUSCLK 16.8MHz है और फ्लैश कंट्रोलर क्लॉक गेटेड नहीं है।
अब फ्लैश कंट्रोलर पर चलते हैं। रीसेट से बाहर FCLKDIV शून्य है, और हमें 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
अब ब्लैंक चेक ठीक है?
इस बिंदु पर मैं हार मानने के लिए तैयार हूं, इन प्रोटोटाइप पर नुकसान खाएं और एसटी से एक प्रोसेसर के साथ जाएं जहां मैंने पहले कभी इस तरह के मुद्दे नहीं उठाए हैं। काइनेटिस प्रलेखन पूरी तरह से पर्याप्त है लेकिन यह बहुत घना है और मुझे इसे शुरू करने में बहुत मुश्किल हो रही है। मैं मेमोरी पठन के माध्यम से I / O को विघटित कर सकता हूं और अन्य बाह्य उपकरणों को एक्सेस कर सकता हूं, लेकिन मैं अपने जीवन के लिए यह पता नहीं लगा सकता कि फ्लैश कंट्रोलर के साथ क्या गलत है। मैं 20 से अधिक वर्षों से माइक्रोस के साथ काम कर रहा हूं और इस तरह की कठिनाई कुछ ऐसी चीज है जिसका मैंने पहले कभी सामना नहीं किया है।
20150102 संपादित करें:
इसलिए अब भी यहां नहीं जाते। मैंने वास्तव में एक FRDM-KL25Z eval बोर्ड (DigiKey से $ 15) खरीदा है और OpenSDA डिबगर पर जेनेरिक CMSIS-DAP सॉफ्टवेयर डालकर इसे संशोधित किया है और कीथ वेकहम के ब्लॉग के अनुसार J11 को काटा है । मुझे एक ऑन-बोर्ड लक्ष्य (KL25Z) मिला है, जो एक साधारण प्रोग्राम चल रहा है, इसलिए यह रीसेट लाइन में हस्तक्षेप नहीं करता है और मैं अपने SKEAZN64 को OpenOCD के साथ देख सकता हूं और इसके साथ खेल सकता हूं, लेकिन दुर्भाग्य से यह इसे या तो प्रोग्राम नहीं कर सकता है। Kinetis Design Studio (KDS) सॉफ़्टवेयर मेरे Kinetis को फ्लैश नहीं करेगा क्योंकि यह कहता है कि यह संरक्षित है और मुझे एक बड़े पैमाने पर मिटाने की आवश्यकता है, लेकिन OpenOCD (KDS के हिस्से के रूप में) को यह पता नहीं लगता है कि यह कैसे करना है। OpenOCD मैं अपने मैक पर बनाया गया git मास्टर संस्करण Kinetis को समझता है, लेकिन विशिष्ट KEA श्रृंखला को नहीं, इसलिए मैं एक वर्ग में वापस आ गया हूं।
J- लिंक पर वापस जा रहा है ...
@AdamHaun के पास वास्तव में एक अच्छा सुराग था, और अगर मैंने J-Link रीसेट प्रकार (rsettype कमांड) को '6' (Kinetis) टाइप करने के लिए सेट किया है, तो J- लिंक कोर रीसेट करने के बाद वॉचडॉग को अक्षम करने वाला है। WDOG_CS1 रजिस्टर (0x40052000) को देखकर ऐसा लगता है कि यह मामला है, लेकिन अभी भी कोई पासा नहीं है। एरेस ऑपरेशन 0xfffffffe और त्रुटि कोड -5 पर पीसी के साथ रेल से दूर जाने के लिए लगता है, और एक "अनलॉक किनेटिस" कमांड केवल तभी काम करता है जब मैं SIM_SOPT (32-बिट 0x00000008 से 0x40048004 लिखकर) रीसेट पिन को अक्षम करता हूं। दुर्भाग्य से अगर मैं करता हूं कि सीपीयू को कभी भी फिर से रोका नहीं जा सकता है, तो संभवतः क्योंकि एसडब्ल्यूडी इंटरफ़ेस एसडब्ल्यूडी डीएपी को ज्ञात स्थिति में मजबूर करने के लिए रीसेट लाइन का उपयोग नहीं कर सकता है।
20150103 संपादित करें:
मैं एलईडी लग रहा है
दोहराएं
मैं एलईडी लग रहा है
TL; DR संस्करण: FRDM-KL25Z बोर्ड पर USBDM छवि डालें (सभी अपने आप में एक कहानी), बोर्ड पर परीक्षण भेजने के लिए ARM प्रोग्रामर स्टैंडअलोन ऐप का उपयोग करें। शक्ति चक्र और वायली।
लंबा वर्जन बाद में आएगा। अब मेरे पास इस KEAZN64 बोर्ड के लिए सॉफ्टवेयर लिखने और डिबग करने के लिए 48h से कम है, इसके साथ जाने वाले अन्य सॉफ़्टवेयर को संशोधित / परीक्षण करना और किसी अन्य क्लाइंट के लिए कुछ दस्तावेज़ों पर काम करना। मैं वादा करता हूं कि मैं एक विस्तृत उत्तर के साथ इस प्रश्न को अपडेट करूंगा । मैं सिर्फ अपनी सफलता को साझा करना चाहता था। आपकी सहायता के लिए हर कोई धन्यवाद देता है। मुझे मॉड्स के साथ बोलना पड़ सकता है क्योंकि मैं वास्तव में आप में से कुछ को विशेष रूप से इनाम देना चाहूंगा।