Uzun yıllardır çeşitli mikrodenetleyiciler ve mikroişlemciler kullanıyorum, ancak Kinetis KE serisi (özellikle S9KEAZN64AMLC) tarafından uyarıldım.
17 Oca 2015 TL; DR:
Freescale onaylar onların kinetis Tasarım Stüdyosu yazılımının v2.0.0 (kendi TRK-KEA64 eval pansiyon dahil) bu cihazla işi değil bu. Şimdilik CodeWarrior MCU V10.6 kullanılmasını öneriyorlar.
Segger, sorunu düzelten ve KDS ile bir Segger J-Link Lite CortexM hata ayıklayıcı kartı kullanmanıza ve tam program / hata ayıklama yeteneğine sahip olmanızı sağlayan v4.96a'yı ("a" önemli, v4.96 kullanıyordum) yayınladı.
Segger v4.96a'yı yayınlamadan önce Freescale'in ucuz (15 $) FRDM-KL25Z değerlendirme kartında OpenSDA hata ayıklayıcısını yeniden programlayarak çipin yanıp sönmesini başardım (v4.10.6.240 kullanarak). Daha sonra USBDM'nin bağımsız "ARM Programmer" yazılımını kullandım. "Oldschool" hata ayıklamada ihtiyaç duymayacak kadar yetkin olduğum için, hata ayıklamayı çalışmaya çalışırken fazla zaman harcamadım. Yerleşik hedef KL25'e "iyi huylu" bir programın yanıp söndüğünden emin olun, ya da yerleşik hedef KL25'in sıfırlama hattı J11 kesimi ile bile OpenSDA hata ayıklayıcısına hala bağlı olduğundan programlamaya müdahale edebilir (bkz. Keith Wakeham'ın blog yazısı , aşağıda bağlantılıdır).
Sorunu belirlememe ve bulgularımı e-posta yoluyla onaylamama yardımcı olduğu için Erich Styger'e çok teşekkür ederim .
Şimdi düzenli olarak planlanan sorumuza dönelim:
Aptalca basit bir 3.3V koparma kartı yaptım. PTA'da bazı LED'ler var, PTC'de bir UART bağlantısı ve SWD hatları özel hatlarında. Bu tahtada tam anlamıyla süslü veya eğlenceli bir şey yok.
Cortex-M için bir J-Link Lite kullanıyorum (J-Link LITE CortexM-9, bkz. Https://www.segger.com/jlink-lite-cortexm.html ) ve hem OSX hem de Windows altında aynı sonuç: J-Link Commander yardımcı programı çipi tanımlayabilir, SRAM'a okuyabilir ve yazabilirim ve manuel okuma ve doğru bellek eşlemeli G / Ç adresine yazarak çevre birimleriyle oynayabilirim. Yine de cihazı yanıp sönmeye çalıştığımda başarısız oluyor.
$ 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 gayet iyi (onunla başka bir Cortex-M0 işlemci olan nRF58122 SoC'yi okuyabilir ve yazabilirim) ve cihaz başka şekilde çalışıyor gibi görünüyor. DigiKey fabrika taze stok oldukları gibi Kinetis kilidini biliyorum, ama o zaman bile JLinkExe "kinetis unlock" komutu herhangi bir hata veya yararlı bilgi olmadan zaman aşımına uğradı.
Bu noktada, aptalca bir şey yaptığımdan eminim, ama ne olabileceği için kaybım var.
Daha önce bu cihazlarla çalışan var mı? Onları nasıl programlıyorsunuz?
geçiş yolu eklemek için düzenle:
Biraz daha bilgi:
NMI # pininin sıfırlama dışında etkinleştirildiğini (ve SIM_SOPT okuyarak bunu doğruladığını) değil, aynı zamanda etkinleştirildiğinde dahili bir çekmeye sahip olduğunu okudum. Bu belirli kısımda PTB4, tasarımımda bağlantısız olan pim 10 üzerindedir. NMI pinini devre dışı bırakmak hiçbir fark yaratmaz. RST # benzerdir; Pimi topraklayan ve aynı zamanda J-Link Lite'a giden bir düğmeye bağlanır, ancak harici bir çekme yoktur. NMI # gibi, RST # pimi de PTA5 sıfırlama olarak yapılandırıldığında etkinleştirilen dahili bir çekme özelliğine sahip olduğundan bu önemli değildir.
Şimdi saate bakılıyor ... Sıfırlama dışında, ICS FLL için saat kaynağıdır ve ICS_C2'deki BDIV 001 (varsayılan sıfırlama) olarak ayarlanmıştır. Doğru anlarsam, 32kHz dahili osilatörün FLL ile 1024 ile çarpılıp 2'ye bölünerek ICSOUTCLK 32kHz * 1024/2 veya 16.8MHz anlamına gelir. J-Link CLI aracılığıyla ICS_S okuyarak FLL kilitli olduğunu doğrulayabilirsiniz:
J-Link>mem8 40064004 1
40064004 = 50
(LOCK ve IREFST ayarlanmıştır, bu doğrudur.)
Daha sonra SIM_SCGC'yi okuyarak SIM'in flaş denetleyicisi için saati etkinleştirdiğini doğrulamak için devam ediyorum. SIM_BUSDIV içindeki BUSDIV'in sıfıra ayarlandığından emin olmak için hızlı bir şekilde kontrol edebilirim, bu da BUSCLK'nin ICSOUTCLK ile aynı frekansta olduğu anlamına gelir (yani bölünmez):
J-Link>mem32 4004800c 1
4004800C = 00003000
J-Link>mem32 40048018 1
40048018 = 00000000
Şimdiye kadar her şey iyi görünüyor. BUSCLK 16.8MHz'dir ve flaş denetleyicisi saatine geçilmez.
Şimdi flaş denetleyicisine geçelim. Sıfırlama dışında FCLKDIV sıfırdır ve 1MHz saat gerekir. KEA64RM'deki Tablo 18-2, FDIV'nin 0x10 olarak ayarlanması gerektiğini göstermektedir.
Sıfırlandı:
J-Link>mem8 40020000 1
40020000 = 00
Bölücüyü kurmak ve işleri doğrulamak iyi:
J-Link>w1 40020000 10
Writing 10 -> 40020000
J-Link>mem8 40020000 1
40020000 = 90
FDIVLD ayarlanır ve FDIV'deki doğru değer gösterilir.
Çok ileri gitmeden önce, flaşın korunmadığından emin olalım:
J-Link>mem8 40020001 1
40020001 = FE
KEYEN = 11 (devre dışı) ve SEC = 10 (güvenli değil). Tamam. Cihazın boş olduğunu doğrulamaya çalışalım:
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
Burada FSTAT'taki MGSTAT bitlerinin boş denetimin başarısız olduğunu ve düzeltilemeyen hataların bulunduğunu gösterdiğini görüyoruz. Garip. Kendimizi silmeyi deneyelim:
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
Tümünü sil komutu başarılı oldu. Şimdi boş bir çek deneyelim:
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
Şimdi boş çek iyi mi?
Bu noktada vazgeçmeye, bu prototiplerin kaybını yemeye ve daha önce hiç bu tür sorunları yaşamadığım bir işlemci ile devam etmeye hazırım. Kinetis belgeleri yeterince kapsamlı ancak çok yoğun ve başlamak çok zor. Bellek okumaları ile I / O'yu kıpırdatıp diğer çevre birimlerine erişebilirim ama hayatım boyunca flaş kontrol cihazında neyin yanlış olduğunu anlayamıyorum. 20 yılı aşkın süredir mikroslarla çalışıyorum ve bu tür bir zorluk daha önce hiç karşılaşmadığım bir şey.
20150102 düzenleme:
Yani hala buraya gitme. Aslında bir FRDM-KL25Z değerlendirme kartı (DigiKey'den 15 $) satın aldım ve genel CMSIS-DAP yazılımını OpenSDA hata ayıklayıcısına koyarak ve J11'i Keith Wakeham'ın bloguna göre keserek değiştirdim . Sıfırlama hattına müdahale etmemesi için basit bir program çalıştıran yerleşik hedefim (KL25Z) var ve SKEAZN64'ümü OpenOCD ile görebilir ve onunla oynayabilirim, ama ne yazık ki de programlayamaz. Kinetis Design Studio (KDS) yazılımı, Kinetis'imi yanıp sönmeyecek çünkü korumalı olduğunu ve toplu silme yapmam gerektiğini söylüyor, ancak OpenOCD (KDS'nin bir parçası olarak) bunu nasıl yapacağını bilmiyor gibi görünüyor. Mac'im üzerinde oluşturduğum OpenOCD'nin git master sürümü Kinetis'i anlıyor, ancak belirli KEA serisini anlayamıyor, bu yüzden kareye geri dönüyorum.
J-Link'e geri dönüyoruz ...
@AdamHaun gerçekten iyi bir ipucuna sahipti ve J-Link sıfırlama türünü (rsettype komutu) '6' (Kinetis) türüne ayarlarsam J-Link'in çekirdeği sıfırladıktan sonra bekçi köpeğini devre dışı bırakması gerekiyor. WDOG_CS1 kaydına (0x40052000) bakıldığında durum böyle görünüyor, ancak hala zar yok gibi görünüyor. Silme işlemi, 0xfffffffe ve hata kodu -5'te PC ile raylardan çıkıyor gibi görünüyor ve "kinetis kilidini aç" komutu yalnızca SIM_SOPT kullanarak sıfırlama pinini devre dışı bıraktığımda çalışır (32 bit değeri 0x00000008 - 0x40048004 yazarak). Ne yazık ki, CPU'nun bir daha durdurulamaması durumunda, muhtemelen SWD arayüzü SWD DAP'ı bilinen bir duruma zorlamak için sıfırlama hattını kullanamaz.
20150103 düzenleme:
Yanıp Sönen LED'im Var
TEKRAR ET
Yanıp Sönen LED'im Var
TL; DR sürümü: USBDM görüntüsünü FRDM-KL25Z panosuna (tek başına bir hikaye) koyun, testi kendiniz tahtaya göndermek için ARM Programcı bağımsız uygulamasını kullanın. Güç çevrimi ve ses.
Uzun versiyon daha sonra gelecek. Şimdi bu KEAZN64 kartı için yazılım yazmak ve hatalarını ayıklamak, onunla birlikte gelen diğer yazılımları değiştirmek / test etmek ve başka bir istemci için bazı belgeler üzerinde çalışmak için 48 saatten az zamanım var. Ben söz veriyorum olacak detaylı bir cevabı olan bu soruyu güncelleyin. Sadece başarımı paylaşmak istedim. Yardımınız için HERKESE teşekkür ederim. Modlarla konuşmak zorunda kalabilirim, çünkü özellikle birkaç kişiye lütuf vermek istiyorum.