Я использую различные микроконтроллеры и микропроцессоры в течение многих, многих лет, но я, кажется, зашел в тупик из серии Kinetis KE (в частности, S9KEAZN64AMLC).
17 января 2015 г. TL; DR:
Freescale подтверждает, что версия 2.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 на недорогой плате FRDM-KL25Z от Freescale за $ 15, перепрошив прошивку OpenSDA, которая поставляется с USBDM (используя v4.10.6.240). Затем я использовал отдельное программное обеспечение «ARM Programmer» от USBDM. Я не тратил много времени, пытаясь заставить работать отладку, так как я достаточно опытен в отладке "oldschool", чтобы не нуждаться в этом. Пожалуйста, убедитесь, что вы вставили «доброкачественную» программу во встроенный целевой KL25, или это может помешать программированию, поскольку линия сброса встроенного целевого KL25 по-прежнему подключена к отладчику OpenSDA даже с сокращением J11 (см. Сообщение в блоге Кейта Уэйкхэма) , связанный ниже).
Большое спасибо Эриху Стайгеру за то, что он очень любезно помог мне определить проблему и подтвердить мои выводы по электронной почте.
Теперь вернемся к нашему регулярно задаваемому вопросу:
Я построил простую и простую коммутационную плату 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, но даже тогда команда «kinetis unlock» в 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 МГц. Я могу проверить через CLI J-Link, что 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 (необеспечено). Ok. Попробуем убедиться, что устройство пустое:
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
Команда erase all успешно выполнена. Теперь давайте попробуем незаполненный чек:
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 редактировать:
Так что до сих пор не пойду сюда. Я на самом деле купил плату FRDM-KL25Z eval (15 долларов от DigiKey) и изменил ее, поместив стандартное программное обеспечение CMSIS-DAP в отладчик OpenSDA и вырезав J11 согласно блогу Кейта Уэйкхэма . У меня есть встроенная цель (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, а команда «unlock kinetis» работает только в том случае, если я отключаю вывод сброса с помощью SIM_SOPT (путем записи 32-битного значения от 0x00000008 до 0x40048004). К сожалению, если я это сделаю, то процессор не сможет снова остановиться, предположительно потому, что интерфейс SWD не может использовать линию сброса, чтобы принудительно установить DAP SWD в известное состояние.
20150103 изменить:
У меня мигает светодиод
ПОВТОРЕНИЕ
У меня мигает светодиод
Версия TL; DR: поместите образ USBDM на плату FRDM-KL25Z (история сама по себе), используйте автономное приложение ARM Programmer для отправки тестового файла .elf на плату. Силовой цикл и вуаля.
Длинная версия появится позже. Теперь у меня осталось менее 48 часов, чтобы написать и отладить программное обеспечение для этой платы KEAZN64, завершить модификацию / тестирование другого программного обеспечения, которое идет с ним, и поработать над некоторой документацией для другого клиента. Я обещаю , что будет обновлять этот вопрос с развернутым ответом. Я просто хотел поделиться своим успехом. Спасибо ВСЕМ за вашу помощь. Возможно, мне придется поговорить с модами, потому что я действительно хотел бы отдать награду нескольким из вас, в частности.