Freescale Kinetis KE - запись на флеш


12

Я использую различные микроконтроллеры и микропроцессоры в течение многих, многих лет, но я, кажется, зашел в тупик из серии 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, завершить модификацию / тестирование другого программного обеспечения, которое идет с ним, и поработать над некоторой документацией для другого клиента. Я обещаю , что будет обновлять этот вопрос с развернутым ответом. Я просто хотел поделиться своим успехом. Спасибо ВСЕМ за вашу помощь. Возможно, мне придется поговорить с модами, потому что я действительно хотел бы отдать награду нескольким из вас, в частности.


Глупый вопрос, но вы уверены, что используете правильный J-Link Lite? Они ограничены одной платформой. Сам не использовал неправильный, но именно так я и ожидал, что он потерпит неудачу.
Скотт Сейдман

Учитывая, что теги j-link и kinetis здесь практически не содержат содержимого (только еще один вопрос), вам, вероятно, следует попытаться найти форум поддержки какого-либо производителя или электронную почту, поддержку по телефону и т. Д. Forum.segger.com может быть?
Fizz

community.freescale.com/community/kinetis - еще одно место, где вы можете найти людей, осведомленных об этом. community.freescale.com/thread/337779 выглядит очень похоже, если не совсем на ваш вопрос ...
Fizz

1
@RespawnedFluff У меня фактически есть почти идентичный вопрос на форумах Kinetis: community.freescale.com/message/466015 . У e.se куда больше FAR, и я предпочитаю это сообщество / сайт, поэтому я подумал, что не мешало бы и здесь спросить.
akohlsmith

1
@RespawnedFluff Обновлен вопрос, чтобы включить конкретную версию J-Link. Это не для OEM-производителя и прямо заявляет: «Поддерживается любое ядро ​​Cortex-M0 / M0 + / M1 / ​​M3 / M4 / M7».
akohlsmith

Ответы:


3

Я не могу найти никаких логических ошибок в вашей процедуре, но вот несколько советов:

  • есть также регистр FTMRH_FERSTAT (в 4002_0007h). Он должен сказать вам, что пошло не так ... но только в случае четности (или ошибок двойной четности). Я не уверен, что это что-то запишет на случай или удалит ошибки, но, вероятно, стоит проверить.

  • в документации KEA также упоминается, что прерывание может быть вызвано ошибками флэш-памяти (раздел «18.3.5 Прерывания флэш-памяти и EEPROM»). Я не знаю, происходит ли это, когда SEGGER стирает его, но это правдоподобное объяснение того, почему компьютер тоже меняется, поскольку вы видели ошибки, помеченные в регистре FSTAT. К сожалению, раздел документации KEA для контроллера прерываний («3.3.2 Конфигурация Nested Vectored Interrupt Controller (NVIC)») довольно смутно указывает в сторону веб-сайта ARM для полной документации. Я не смог выяснить, есть ли обработчик прерываний по умолчанию, настроенный (при загрузке) для ошибок флэш-памяти.

  • Вы выполняли стирание только на уровне секторов вручную, поэтому попробуйте вручную (например, самостоятельно записав соответствующий регистр) выполнить команду полного удаления флэш-памяти; единственный способ сделать это в одной команде - это «незащищенная команда флэш», описанная в разделе 18.3.9.10 (стр. 246) руководства. Это как «небезопасно» для устройства, так и для полной прошивки и стирания EEPROM. Вы можете опросить бит FSTAT (CCIF), чтобы увидеть, когда он предположительно завершен, и снова проверить флаги ошибок. РЕДАКТИРОВАТЬ: в руководстве также есть раздел «18.3.9.7 Команда« Удалить все блоки »».

  • попробуйте снизить частоту шины. Все, что выше 0,8 МГц, работает в соответствии с документацией. Я предлагаю это, потому что на форуме Freescale была одна тема, где внешняя вспышка работала нормально, но не выше определенной частоты, которая все еще находилась в хорошо документированном диапазоне. Таким образом, вполне возможно, что контроллер флэш-памяти в чипе ненадежен и не может работать на полном диапазоне указанных частот.

  • аналогично, твой другой чип. Не исключено, что с учетом того, сколько этих затрат (около 3 долларов) у вас плохая. Я помню, что у меня был встроенный чип x86, который работал нормально в большинстве случаев, но имел странные ошибки в некоторых инструкциях защищенного режима; моя проблема ушла с другим устройством той же марки. Мне не ясно, есть ли у Freescale (публично заявленные) степпинги и ошибки для этих устройств или нет.

Это все, что я могу придумать с точки зрения предложений по отладке, о которых не говорили другие на этой странице.

20150103 редактирование (я):

(Перемещенный материал здесь из моих комментариев и расширен)

Кажется, что не все серии Kinetis (официально, по крайней мере) протестированы со всеми флешерами. Довольно новая серия EA, которую вы на самом деле используете, кажется, официально поддерживается только собственной флеш-памятью Freescale / OEM Cyclone MAX; это единственный из перечисленных на странице Freescale для EA serires . Теперь, для старых Kinetis, таких как KL0, список намного длиннее, включая SEGGER . Я не знаю, просто ли это из-за отсутствия тестирования других флешеров для серии EA, или есть какая-то программная причуда, о которой знает только их Cyclone MAX. Я надеялся, что, возможно, это всего лишь Freescale, который медлит с перечислением других флешеров, но после проверки руководства по J-link (надеюсь, правильный), там нет ни серии Kinetis E или EA, перечисленной там (стр. 249), как протестированные, но только устройства Kinetis K10-K60 (и некоторые старые MAC7).

Стоит отметить, что программное обеспечение / прошивка PExDrv для Cyclone MAX имеет пакет обновления (v10.3) от 20.03.2014, который «добавляет поддержку производных MKE04Z64, MKE04Z128, MKE06Z64, MKE06Z128, SKEAZ64 и SKEAZ128». Еще одна подсказка - это то, что Freescale предлагает программное обеспечение с открытым исходным кодом загрузчика / флэш - загрузчика для Kinetis.Несмотря на то, что обновление было сделано совсем недавно в 12/2014, оно не отображает список поддерживаемых устройств серии E или EA [sub]. Так что я думаю, что между прошивками серии E / EA и другими Kinetis, такими как K10, есть что-то совершенно иное, хотя я понятия не имею, в чем именно заключается эта разница. Поэтому я думаю, что ожидать, что прошивка EA будет работать автоматически с чем угодно, кроме Cyclone MAX, вероятно, нереально в данный момент. Возможно, вы сможете в конечном итоге выяснить, как это сделать на уровне «голого металла» (прямые команды регистрации) из документации серии EA, но я согласен, что документация довольно тупая; в нем, безусловно, отсутствуют какие-либо пошаговые инструкции, являющиеся просто справочным руководством. Если бы загрузчик / flashloader с открытым исходным кодом Freescale поддерживал серию E / EA, вы

Ваш эксперимент с FRDM-KL25Z (который поставляется с серией Kinetis L) указывает в одном направлении, т. Е. Вы не можете поменять серию L на серию EA и использовать один и тот же флешер (в данном случае OpenSDA).

И если вы похожи на Кейта (блогера), который «считает [$] 100 долларов для программиста смехотворным», вы, вероятно, не будете удовлетворены перспективой понизить $ 900 + на этом Циклоне. Я не знаю, делает ли Freescale это специально для того, чтобы обуздать своих автомобильных покупателей или что ... Конечно, странно выглядит то, что инструменты для большинства серий Kinetis не работают с E / EA.

Также имейте в виду, что функция прошивки OpenSDA работает только под MS Windows .

Если вы хотите попробовать (взломать) больше плат, лучше подойдет одна с Kinetis серии E, например FRDM-KE02Z (13 долларов в Digi-Key); также использует OpenSDA, поэтому он может быть взломан. Насколько я могу судить, они не делают / продают доски с серией EA. Однако, похоже, что вы не можете использовать один процессор / плату OpenSDA для программирования другого типа Kinetis, чем тот, который установлен на его собственной плате , даже если оба процессора относятся к одной и той же (например, L) серии, но с разными номерами. К сожалению, «Open» в OpenSDA означает только то, что спецификация SDA открыта, а не то, что они выдают исходный код как open-source; поэтому я даже не могу найти исходный код для программирования вспышки серии E. Видимо, я только наполовину прав насчет этого. OpenSDA v1 не с открытым исходным кодом, но v2 .

Итак, вот пример с OpenSDAv2 . Это в основном просто CMSIS-DAP / mbed загрузчик и флешер. Так что он может не иметь тех же функций или поддерживать те же микросхемы, что и v1 ... и это действительно так, потому что flash_features.h не перечисляет ни одного MKE (Kinetis E-series), не говоря уже о SKE (EA-series) устройства. Таким образом, предложение Freescale для серии EA выглядит следующим образом: купите наш флешер Cyclone за 900 долларов или удачи в написании своего собственного из любых незавершенных частей открытого кода, которые мы выпустили.

Оказывается, однако, что есть проект с открытым исходным кодом, который может программировать по крайней мере E-серии Kinetis, а именно USBDM . Соответствующий бит из его журнала изменений :

V4.1.6.140 (апрель 2014 г.)

Дополнительные устройства Kinetis (MKE04, MKE06, MK64F)

  • Исправления для устройств MKE (не удалось запрограммировать, кроме как после Mass Erase)

И, судя по этой записи в журнале, E-серии выглядят странно. Для EA-серии (SKE) прямой поддержки нет, но эта кодовая база, вероятно, является лучшим выбором, если вы хотите взломать свой собственный флешер; или, возможно, вы можете убедить автора USBDM добавить поддержку серии EA (SKE). В качестве аппаратного обеспечения для USBDM оказывается, что вы можете использовать FRDM-KL25Z, который вы уже приобрели; но вам все равно придется взломать программное обеспечение USBDM для поддержки чипов SKE.

Основной файл конфигурации для USBDM выглядит довольно устрашающе. В USDBM для разных устройств серии MKE используются разные флешеры (базы кодов): то, что называется «FTMRE», используется для MKE04 и MKE06, а «FTMRH» используется для MKE02. Кратко изучив две кодовые базы, вы почти наверняка захотите кодовую базу FTRMH, а не FTRME. Последний имеет структуру FTMRH, отличную от вашего устройства SKEA64, например, делитель тактовых импульсов - это не первое, а 4-е поле. FTRME также устанавливает для шины FIDV значение 0x17 = 24 МГц, что кажется недопустимым для вашего чипа (стр. 224 в руководстве KEA64 предлагает максимальные 20 МГц). FTMRH устанавливает его в 0x0F = 16 МГц (как вы делаете), что кажется нормальным.

На данный момент (если вы не хотите покупать Cyclone MAX), вам лучше всего связаться с Podonoghue, чтобы ваш чип работал с его базой кода. Он, кажется, активен и вполне готов помочь с новыми устройствами (на форуме freescale) .

Также из этого исходного кода USDBM я могу предсказать, что ваш SEGGER не сможет правильно прошить свой SKEA, если он не получит свое собственное обновление прошивки. Почему я так говорю? Поскольку кодовая база USDBM FTMRH используется там только одним устройством, MKE02, о котором ваш SEGGER, похоже, ничего не знает (основываясь на его руководстве). Другие, более распространенные устройства, такие как серии Kinetis L и K, используют другую флеш-карту USDBM, основанную на кодовой базе FTFA. Если вы посмотрите на код FTFA , структура регистров контроллера флэш-памяти (также начинающаяся с 0x40020000) для них будет другой; первое поле - это даже не делитель часов, а статистический регистр и т. д. «Отличный» способ для Freescale создавать несовместимые устройства ... но, несомненно, благо для производителей флешеров.


1
FERSTAT не показывает ничего полезного, как вы подозревали; Я попробовал это на раннем этапе всей этой катастрофы. Все прерывания вспышки по умолчанию отключены, но я проверил, возможно, это было частью проблемы. Там тоже нет игры в кости. У меня есть две доски, и они обе действуют одинаково, но за многие годы я понял, что кремний на самом деле очень мало времени, поэтому я рву свои волосы здесь. :-)
akohlsmith

Я попробую сбросить частоту; значения по умолчанию после сброса, по-видимому, относятся к частоте шины 16,78 МГц (32 кГц * 1024/2), поэтому я выбрал делитель тактовой частоты вспышки 0x10 (32 кГц * 1024/2/16 - 1,048 МГц, что находится в пределах спецификации, но, возможно, немного ближе к краю)
akohlsmith

1
Ваше другое предложение о команде unprotect (0xb) вместо стирания всех (0x8) ... это успешно, но я не могу остановить процессор позже и, похоже, не могу потом что-либо программировать во флэш-память.
akohlsmith

Я искренне благодарю вас за все ваши попытки помочь этому незнакомцу в Интернете. Я изо всех сил пытаюсь понять, почему этот чип так сложно использовать, даже при использовании поддерживаемых программистов (J-Link и CMSIS-DAP) и собственной среды разработки и инструментов Freescale. Это поражает меня.
akohlsmith

Спасибо за ваше детальное исследование и постоянную помощь. На самом деле это именно то, что я и сделал в итоге: использование FRDM-KL25Z с прошивкой USBDM и автономной флеш-памяти ARM. Это то, что заставило мой мигающий светодиодный тест в устройстве. Что любопытно, так это то, что в списке поддерживаемых Segger процессоров явно упоминается SKEAZN64xxx2, но он не работает.
akohlsmith

2

Вы пробовали это: Разблокировка и стирание FLASH с Segger J-Link

Предположительно, вы должны:

Чтобы перепрограммировать защищенные секторы FLASH с помощью Segger J-Link, мне нужно сначала разблокировать и массово стереть устройство. Для этого есть утилита J-Link Commander, которая имеет интерфейс командной строки для снятия защиты и удаления устройства. Только для стирания J-Flash (и Lite) является очень полезным инструментом, особенно для получения «чистой» памяти устройства.

Что мне показалось интересным, так это то, что вы должны разблокировать его и стереть на следующем шаге, если вы хотите, чтобы разблокировка была постоянной:

Но, похоже, мне нужно сделать разблокировку, а затем стереть, чтобы сделать ее постоянной. Чтобы стереть устройство, я могу использовать ту же утилиту командной строки. Но мне нужно сначала указать имя устройства, а затем я могу стереть его (пример для KL25Z):

EDIT1: добавлены неверные данные.

EDIT2: вы можете прочитать реестр Flash Security (FSEC)? Ты пробовал?

EDIT3: из использования функций безопасности и защиты флэш-памяти Kinetis, ред. 1, 6/2012

Массовое стирание с помощью отладчика / JTAG Отладчики и инструменты JTAG имеют очень ограниченный доступ к устройству, когда защищен процессор. Единственные регистры, к которым можно получить доступ через JTAG, это регистры состояния и управления MDM-AP. Чтобы позволить инструментам отладки незащищать детали, бит 0 регистра управления MDM-AP может быть установлен для запроса массового стирания процессора. Чтобы использовать этот метод для отключения защиты, для FSEC [MEEN] должно быть установлено значение, отличное от 10, чтобы обеспечить возможность массового стирания. Если массовое стирание отключено, FSEC [MEEN] = 10, то запрос массового стирания будет игнорироваться вспышкой, и устройство не может быть защищено с помощью этого метода. Многие отладчики автоматически используют бит 2 регистра состояния MDM-AP, чтобы определить, защищено ли устройство при попытке установить соединение. Можно использовать всплывающее окно отладчика, чтобы предупредить, что устройство защищено, и спросить, нужно ли массовое удаление, чтобы обезопасить устройство. Как только массовое удаление будет завершено и проверено, безопасность будет отключена. Некоторые отладчики могут автоматически запрограммировать поле конфигурации флэш-памяти для перевода флэш-памяти в незащищенное состояние после завершения массового стирания, FSEC = 0xFE.

Также я наткнулся на посты, в которых упоминаются разные семейства кинетиков, требующие разных манипуляций с сигналом RESET при попытке чтения / записи регистра MDM-AP.

EDIT4: вы пытались добавить сильное подтягивание SWD_DIO? Это выстрел в темноте, но Freescale рекомендует его.


Спасибо, что нашли время, чтобы помочь перепроверить и внести предложения. FTMRH_FSEC (0x40020001) возвращает значение 0xfe, которое настолько разблокировано / ненадежно, насколько это возможно. Если я читаю флэш-память в 0x0000400c, я также вижу биты безопасности, показывающие то же значение (именно здесь FSEC получает значения при сбросе при включении): J-Link> mem8 400 10 00000400 = FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FE FF
akohlsmith

J-Link имеет команду "rsettype" с определенным значением Kinetis (6), которое отключает сторожевой таймер при сбросе. Это не останавливает процессор, но я могу сделать это с помощью команды "h". Я также вижу, что если я не использую rsettype 6, регистры-сторожевые устройства сообщают, что сторожевой таймер включен, что совпадает с документацией.
akohlsmith

Я бы попробовал подтягивание, у обеих плат, которые вы пробовали, его нет, и если это не работает, то Jlink - это NOK.
Игги

Я попробовал подтягивание (4.7k, не уверен, насколько сильным должен быть сильный), но это не имело никакого значения.
akohlsmith

4k7 это хорошо. Ты сделал все, что мог. С этого момента проверьте поведение с FRDM-KL25Z и затем отправьте 1 миллион билетов парням Jlink.
Игги

1

Вы должны остановить процессор в первую очередь. Очевидно, что вы получаете симптом работающего процессора. Я использую openocd; перед прошивкой устройства использую команду "reset halt". Эта «остановка» является подкомандой «сброса» для остановки сразу после сброса, в то время как есть и отдельная команда остановки.

Так что ищите команду «reset halt», просто остановки будет недостаточно, потому что вам нужно перейти в состояние предварительной инициализации векторов, я полагаю.


Спасибо за ваш комментарий, но Segger сначала останавливает процессор. Я также пытался вручную остановить процессор перед тем, как вводить эти команды без каких-либо изменений. Я должен был сделать это очевидным в своем вопросе.
akohlsmith

Я не заметил, что вы говорите, что остановка перед инициализацией векторов может быть необходимой. Заглядывая в это, но у меня есть проблемы с пониманием, почему это будет необходимо. Спасибо за подсказку, каждый бит помогает
akohlsmith

1

Я еще не упоминал об этом, поэтому я продолжу и предположу, что проблема в том, что эта часть имеет кеш, который включен при перезагрузке. Это согласуется с «странным» поведением, которое вы наблюдали при пустой проверке. Основной Flash был обновлен, но кеш не был. Чтобы это исправить, отключите кеш данных и инструкций, записав в MCM_PLACRat, F000_300Chа также очистите кеш, как вы это делаете. Это то же самое странное поведение, вероятно, сбило с толку и Сеггера.


Это было очень хорошее предложение. при сбросе MCM_PLACR читается как 0x00000850, что немного странно (кэш данных отключен, но биты 6 и 4 зарезервированы в документации). Я попытался отключить все (спекуляция, кэш контроллера, кеширование инструкций), а затем очистить кеш, написав 0x0000bc00; он читает обратно 0x0000b850, но без изменений в поведении.
akohlsmith

Мне будет очень интересно услышать, когда вы наконец решите эту проблему. Между тем, этот чип, безусловно, не появится ни в одном из моих проектов в ближайшее время. Извините за вашу боль, но спасибо, что поделились интересным вопросом.
Эдвард

0

Так как сообщение об ошибке касается значения ПК, звучит так, будто процессор куда-то сходит с рельсов. Это длинный выстрел, но вы пытались отключить сторожевой таймер?


Это было ОТЛИЧНОЕ предложение; Я потратил некоторое время после прочтения вашего ответа, проверяя эту теорию. Однако оказывается, что при запуске «устройства skeazn64xxx2» J-Link уже учитывает это и отключает сторожевой таймер после сброса. Я проверил это, проверив регистр WDOG_CS1 как с указанием устройства, так и без указания его между циклами питания. :-(
akohlsmith

Хм ... хорошо, еще одна вещь, которую я заметил, это то, что вы получаете исправимые ошибки во время незаполненной проверки. Ваш J-Link отключает флэш-ECC? Если нет, то это может вызвать проблемы с проверкой при обратном чтении и, возможно, даже вызвать неожиданные прерывания. (Я не знаком с микроконтроллерами Freescale, но думаю, что такое поведение довольно распространено.)
Адам Хаун,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.