Я використовую різні мікроконтролери та мікропроцесори вже багато, багато років, але мені здається, що вона була пригнічена серією Kinetis KE (зокрема, S9KEAZN64AMLC).
17 січня 2015 р. TL; DR:
Freescale підтверджує, що v2.0.0 програмного забезпечення Kinetis Design Studio не працює з цим пристроєм (включаючи власну плату TRK-KEA64 eval). Наразі вони рекомендують використовувати CodeWarrior MCU V10.6.
Segger випустив v4.96a (важливо "a", я використовував v4.96), який виправляє проблему та дозволяє використовувати плату налагодження Segger J-Link Lite CortexM з KDS та мати повну можливість програми / налагодження.
Перед тим, як Segger випустив v4.96a, мені вдалося прошивати мікросхема, перепрограмувавши відладчик OpenSDA на недорогій (15 доларах) FRDM-KL25Z плат eval шляхом перепрошивки програмного забезпечення OpenSDA, що поставляється разом з USBDM (використовуючи v4.10.6.240). Потім я використовував автономне програмне забезпечення "ARM Programmer" USBDM. Я не витрачав багато часу на те, щоб налагодити роботу, оскільки я достатньо досвідчений у налагодженні "oldschool", щоб цього не потребувати. Будь ласка, переконайтеся, що ви встромлюєте "доброякісну" програму в бортову ціль KL25 або це може заважати програмуванню, оскільки бортова лінія скидання KL25 все ще підключена до налагоджувача OpenSDA навіть з відсіканням J11 (див. Повідомлення в блозі Keith Wakeham , пов’язані нижче).
Велике спасибі Еріху Стайгеру за те, що дуже милостиво допомагає мені вирішити проблему та підтвердити свої висновки електронною поштою.
Тепер повернемось до нашого регулярно запланованого питання:
Я побудував тупо-просту плату розриву 3,3 В. У PTA є кілька світлодіодів, підключення UART на PTC, а лінії SWD - на виділені лінії. У цій дошці буквально нічого фантазійного або смішного.
Я використовую J-Link Lite для Cortex-M (J-Link LITE CortexM-9, див. Https://www.segger.com/jlink-lite-cortexm.html ), і під OSX та Windows я отримую той же результат: утиліта J-Link Commander може ідентифікувати мікросхему, я можу читати та писати в SRAM та грати з периферійними пристроями з ручним читанням і записом на правильну адресу, вказується на вхід / вивід. Коли я намагаюся спалахнути пристрій, він не вдається.
$ 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, але навіть тоді команда "розблокування кінети" в JLinkExe вимикається без помилок чи корисної інформації.
У цей час я впевнений, що роблю щось дурне, але я втрачаю те, що це може бути.
Хтось раніше працював з цими пристроями? Як ви їх програмуєте?
редагувати, щоб додати детальну інформацію:
Ще трохи інформації:
Я прочитав, що штифт NMI # увімкнено без скидання (і підтвердив це, читаючи SIM_SOPT), але також, що він має внутрішнє підтягування при включенні. На цій конкретній частині PTB4 знаходиться на штифті 10, який в моїй конструкції не підключається. Відключення штифта NMI не має ніякої різниці. RST # схожий; Він підключений до кнопки, яка спричиняє штифт, а також переходить до J-Link Lite, але зовнішнього підключення немає. Це не має значення, тому що, як і NMI #, штифт RST # має внутрішнє підключення, яке ввімкнено, коли PTA5 налаштовано для скидання.
Дивлячись на синхронізацію зараз ... Без скидання ICS є джерелом тактового сигналу для FLL, а BDIV в ICS_C2 встановлено на 001 (за замовчуванням скидання). Якщо я правильно розумію, це означає, що внутрішній осцилятор 32 кГц множиться на 1024 на FLL, а потім ділиться на 2, роблячи ICSOUTCLK 32 кГц * 1024/2 або 16,8 МГц. Я можу через 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,8 МГц, а тактовий годинник флеш-контролера не встановлений.
Тепер перейдемо до флеш-контролеру. У випадку скидання FCLKDIV дорівнює нулю, і нам потрібна тактова частота 1 МГц. З таблиці 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 досить ґрунтовна, але вона дуже щільна, і мені дуже важко почати роботу. Я можу перемикати введення-виведення через зчитування пам'яті та доступ до інших периферійних пристроїв, але я не можу за все життя зрозуміти, що не так з флеш-контролером. Я працюю з мікрофоном вже більше 20 років, і подібні труднощі - це те, з чим я ніколи раніше не стикався.
20150102 редагувати:
Тому досі сюди нікуди не йти. Я фактично купив плату eval FRDM-KL25Z (15 доларів від DigiKey) і змінив її, поставивши загальне програмне забезпечення CMSIS-DAP на відладчик OpenSDA і скоротивши J11 відповідно до блогу Keith 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, а команда "розблокувати кінетику" працює лише в тому випадку, якщо я відключую контактний код скидання за допомогою SIM_SOPT (записавши 32-бітове значення 0x00000008 до 0x40048004). На жаль, якщо я це зробив, процесор не може бути зупинений знову, імовірно, через те, що інтерфейс SWD не може використовувати лінію скидання, щоб примусити SWD DAP перейти в відомий стан.
20150103 редагувати:
У мене блимає світлодіод
ПОВТОРИТИ
У мене блимає світлодіод
Версія TL; DR: розмістіть зображення USBDM на платі FRDM-KL25Z (історія все самостійно), використовуйте окремий додаток ARM Programmer для надсилання тесту .elf на плату. Цикл живлення і вуаля.
Довга версія з'явиться пізніше. Зараз у мене менше 48 годин, щоб написати та відладкувати програмне забезпечення для цієї плати KEAZN64, закінчити модифікацію / тестування іншого програмного забезпечення, яке йде разом із цим, та працювати над деякою документацією для іншого клієнта. Обіцяю , що оновлю це питання детальною відповіддю. Я просто хотів поділитися своїм успіхом. Дякую ВСЯКОМУ за допомогу. Мені, можливо, доведеться поговорити з модниками, тому що я дуже хотів би дати нагороду пару з вас, зокрема.