Saya telah menggunakan berbagai mikrokontroler dan mikroprosesor selama bertahun-tahun sekarang, tetapi sepertinya saya terhalang oleh seri Kinetis KE (khususnya S9KEAZN64AMLC).
17 Jan 2015 TL; DR:
Freescale mengonfirmasi bahwa v2.0.0 dari perangkat lunak Kinetis Design Studio mereka tidak berfungsi dengan perangkat ini (termasuk papan eval TRK-KEA64 mereka sendiri). Mereka merekomendasikan untuk menggunakan CodeWarrior MCU V10.6 untuk sementara waktu.
Segger telah merilis v4.96a ("a" penting, saya menggunakan v4.96) yang memperbaiki masalah ini dan memungkinkan Anda untuk menggunakan papan debugger Segger J-Link Lite CortexM dengan KDS dan memiliki kemampuan program / debug penuh.
Sebelum Segger merilis v4.96a, saya berhasil mem-flash chip dengan memprogram ulang debugger OpenSDA pada papan eval FRDM-KL25Z ($ 15) murah Freescale dengan mem-reflashing firmware OpenSDA yang datang bersama dengan USBDM (menggunakan v4.10.6.240). Saya kemudian menggunakan perangkat lunak "ARM Programmer" mandiri USBDM. Saya tidak menghabiskan banyak waktu untuk mencoba debugging berfungsi, karena saya cukup mahir di debug "oldschool" untuk tidak membutuhkannya. Pastikan Anda mem-flash program "jinak" ke target KL25 on-board atau mungkin mengganggu pemrograman karena garis reset target on-board KL25 masih terhubung ke debugger OpenSDA bahkan dengan potongan J11 (lihat posting blog Keith Wakeham) , ditautkan di bawah).
Terima kasih banyak kepada Erich Styger karena telah dengan sangat murah hati membantu saya menentukan masalah dan mengkonfirmasi temuan saya melalui email.
Sekarang kembali ke pertanyaan terjadwal kami:
Saya telah membangun papan breakout 3.3V sederhana-bodoh. Ada beberapa LED di PTA, koneksi UART di PTC dan jalur SWD ada di jalur khusus mereka. Tidak ada yang mewah atau lucu tentang papan ini.
Saya menggunakan J-Link Lite untuk Cortex-M (J-Link LITE CortexM-9, lihat https://www.segger.com/jlink-lite-cortexm.html ) dan di bawah OSX dan Windows saya mendapatkan hasil yang sama: utilitas J-Link Commander dapat mengidentifikasi chip, saya dapat membaca dan menulis ke SRAM dan bermain-main dengan periferal dengan manual membaca dan menulis ke alamat I / O yang dipetakan dengan memori yang benar. Namun, ketika saya mencoba mem-flash perangkat, gagal.
$ 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 benar-benar baik-baik saja (saya dapat membaca dan menulis ke SoR nRF58122, prosesor Cortex-M0 lainnya, dengan itu) dan perangkat tampaknya bekerja sebaliknya. Saya tahu Kinetis tidak dikunci karena mereka adalah stok pabrik baru dari DigiKey, tetapi meskipun begitu perintah "kinetis terbuka" di JLinkExe habis tanpa kesalahan atau informasi yang berguna.
Pada titik ini saya yakin saya melakukan sesuatu yang bodoh, tetapi saya bingung apa yang bisa terjadi.
Adakah yang pernah menggunakan perangkat ini sebelumnya? Bagaimana Anda memprogramnya?
edit untuk menambahkan langkah-langkah:
Beberapa informasi lebih lanjut:
Saya membaca bahwa pin NMI # diaktifkan dari reset (dan memverifikasi ini dengan membaca SIM_SOPT) tetapi juga memiliki pin internal ketika diaktifkan. Pada bagian khusus ini PTB4 ada pada pin 10 yang tidak terhubung dalam desain saya. Menonaktifkan pin NMI tidak ada bedanya. RST # serupa; Terhubung ke tombol tekan yang menjadi dasar pin dan juga pergi ke J-Link Lite tetapi tidak ada pullup eksternal. Ini seharusnya tidak masalah karena seperti NMI #, pin RST # memiliki pullup internal yang diaktifkan ketika PTA5 dikonfigurasi untuk menjadi reset.
Melihat pencatatan jam kerja sekarang ... Di luar reset, ICS adalah sumber jam ke FLL dan BDIV di ICS_C2 diatur ke 001 (default reset). Jika saya mengerti dengan benar, ini berarti bahwa osilator internal 32kHz dikalikan dengan 1024 oleh FLL dan kemudian dibagi dengan 2, membuat ICSOUTCLK 32kHz * 1024/2 atau 16.8MHz. Saya dapat memverifikasi melalui J-Link CLI bahwa FLL dikunci dengan membaca ICS_S:
J-Link>mem8 40064004 1
40064004 = 50
(LOCK dan IREFST diatur, ini benar.)
Saya kemudian beralih untuk memverifikasi bahwa SIM mengaktifkan jam untuk pengontrol flash dengan membaca SIM_SCGC. Saya juga dapat dengan cepat memeriksa untuk memastikan bahwa BUSDIV di SIM_BUSDIV diatur ke nol yang berarti bahwa BUSCLK adalah frekuensi yang sama dengan ICSOUTCLK (yaitu tidak dibagi ke bawah):
J-Link>mem32 4004800c 1
4004800C = 00003000
J-Link>mem32 40048018 1
40048018 = 00000000
Sejauh ini, semuanya terlihat baik-baik saja. BUSCLK adalah 16.8MHz dan jam pengontrol flash tidak terjaga keamanannya.
Sekarang mari kita beralih ke pengontrol flash. Out of reset FCLKDIV adalah nol, dan kami membutuhkan clock 1MHz. Tabel 18-2 dalam KEA64RM menunjukkan bahwa FDIV harus diatur ke 0x10.
Tidak diatur ulang:
J-Link>mem8 40020000 1
40020000 = 00
Menyiapkan pembagi dan memverifikasi hal-hal baik:
J-Link>w1 40020000 10
Writing 10 -> 40020000
J-Link>mem8 40020000 1
40020000 = 90
FDIVLD diatur dan nilai yang benar dalam FDIV ditampilkan.
Sebelum melangkah terlalu jauh, mari pastikan flash tidak terlindungi:
J-Link>mem8 40020001 1
40020001 = FE
KEYEN = 11 (dinonaktifkan) dan SEC = 10 (tidak aman). Baik. Mari kita coba memverifikasi perangkat kosong:
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
Di sini kita melihat bahwa bit MGSTAT di FSTAT menunjukkan bahwa pemeriksaan kosong telah gagal dan juga ditemukan kesalahan yang tidak dapat diperbaiki. Aneh. Mari kita coba menghapusnya sendiri:
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
Perintah hapus semua berhasil. Sekarang mari kita coba cek kosong:
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
Sekarang cek kosong baik-baik saja?
Pada titik ini saya hampir siap untuk menyerah, makan kerugian pada prototipe ini dan pergi dengan prosesor dari ST di mana saya belum pernah mengalami masalah seperti ini sebelumnya. Dokumentasi Kinetis cukup menyeluruh tetapi sangat padat dan saya merasa sangat sulit untuk memulai. Saya dapat menggoyangkan I / O melalui memori membaca dan mengakses periferal lain tetapi saya tidak bisa selama hidup saya mencari tahu apa yang salah dengan pengontrol flash. Saya telah bekerja dengan micros selama lebih dari 20 tahun dan kesulitan semacam ini adalah sesuatu yang belum pernah saya temui sebelumnya.
Sunting 20150102:
Jadi tetap tidak pergi ke sini. Saya sebenarnya telah membeli papan eva FRDM-KL25Z ($ 15 dari DigiKey) dan memodifikasinya dengan meletakkan perangkat lunak CMSIS-DAP generik pada OpenSDA debugger dan memotong J11 sesuai blog Keith Wakeham . Saya mempunyai target on-board (KL25Z) yang menjalankan program sederhana sehingga tidak mengganggu garis reset dan saya dapat melihat SKEAZN64 saya dengan OpenOCD dan bermain dengannya, tetapi sayangnya itu tidak dapat memprogramnya juga. Perangkat lunak Kinetis Design Studio (KDS) tidak akan mem-flash Kinetis saya karena dikatakan dilindungi dan saya perlu melakukan penghapusan massal, tetapi OpenOCD (sebagai bagian dari KDS) tampaknya tidak tahu bagaimana melakukan ini. Versi git master OpenOCD yang saya bangun di Mac saya mengerti Kinetis, tetapi bukan seri KEA tertentu, jadi saya kembali ke titik awal.
Kembali ke J-Link ...
@AdamHaun memiliki petunjuk yang sangat bagus, dan jika saya mengatur tipe reset J-Link (perintah rsettype) untuk mengetikkan '6' (Kinetis) J-Link seharusnya menonaktifkan watchdog setelah mengatur ulang core. Melihat register WDOG_CS1 (0x40052000) tampaknya memang demikian, tetapi masih belum ada dadu. Operasi hapus sepertinya keluar dari rel dengan PC pada 0xfffffffe dan kode kesalahan -5, dan perintah "membuka kinetis" hanya berfungsi jika saya menonaktifkan pin reset menggunakan SIM_SOPT (dengan menulis nilai 32-bit 0x00000008 ke 0x40048004). Sayangnya jika saya lakukan itu CPU tidak akan pernah bisa dihentikan lagi, mungkin karena antarmuka SWD tidak dapat menggunakan garis reset untuk memaksa SWD DAP ke keadaan yang diketahui.
Sunting 20150103:
Saya MEMILIKI LED berkedip
ULANG
Saya MEMILIKI LED berkedip
TL; versi DR: letakkan gambar USBDM di papan FRDM-KL25Z (sebuah cerita tersendiri), gunakan aplikasi mandiri ARM Programmer untuk mengirimkan tes .diri ke papan. Siklus daya dan voila.
Versi panjang akan datang nanti. Saya sekarang memiliki kurang dari 48 jam untuk menulis dan men-debug perangkat lunak untuk papan KEAZN64 ini, selesai memodifikasi / menguji perangkat lunak lain yang menyertainya, dan mengerjakan beberapa dokumentasi untuk klien lain. Saya berjanji akan memperbarui pertanyaan ini dengan jawaban terperinci. Saya hanya ingin membagikan kesuksesan saya. Terima kasih SEMUA ORANG atas bantuan Anda. Saya mungkin harus berbicara dengan mod karena saya benar-benar ingin memberikan hadiah kepada beberapa dari Anda khususnya.