Jump to content

    

Список проблемных моментов при программировании Kinetis

Кое-какие вещи могущие быть неочевидными при инициализации периферии и программировании Kinetis

 

1. Инициализация осциллятора от кварца.

В целом кварцы у Kinetis запускаются очень надежнов в отличие от того же STM32.

Но если установить в регистре MCG_C2 бит HGO0 в 1 (чтобы увеличить усиление генератора) для высокочастотных уварцев (> 10 МГц),

то может не включится PLL0. Хотя осциллограф покажет очень хорошую осцилляцию с высокой амплитудой.

 

2. Ватчдог (WDOG) надо выключать сразу в первых командах инициализации. Иначе можете не успеть завершить даже саму инициализацию. Потом можно включить снова.

 

3. Чтобы USB могла передавать строки прямо из FLASH памяти надо отдельно разрешить мастеру DMA USB доступ к чтению FLASH памяти в регистре FMC_PFAPR

В демо примерах от NXP это не делают.

Также не забываем и про основной DMA и других мастеров на шине которым тоже надо открыть доступ к FLASH памяти.

 

4. Чтобы нормально работал модуль измерения скорости на 3-х фазных датчиках Холла мало включить бит 22 в регистре SIM_SOPT4,

но надо еще и инициализировать все три канала таймеров FTM1 (канал 1) и FTM2 (канал 0 и 1) на захват по фронту и спаду.

Share this post


Link to post
Share on other sites
2. Ватчдог (WDOG) надо выключать сразу в первых командах инициализации. Иначе можете не успеть завершить даже саму инициализацию. Потом можно включить снова.

 

Прикольно. А если зависнем в инициализации, то навечно? Может просто сбросить и увеличить интервал, пока не прошли инит и зашли в основной цикл?

Share this post


Link to post
Share on other sites
Прикольно. А если зависнем в инициализации, то навечно? Может просто сбросить и увеличить интервал, пока не прошли инит и зашли в основной цикл?

 

Тут логика была такая:

если вы зависли в инициализации, то вачдог не поможет , вы всегда там будете зависать.

 

 

 

 

 

Share this post


Link to post
Share on other sites
Тут логика была такая:

если вы зависли в инициализации, то вачдог не поможет , вы всегда там будете зависать.

Не факт. Ватчдог иногда помогает от аппаратных помех. Он не только для защиты от программных багов.

Прошла такая помеха в некую периферию, ну и завис её драйвер. Собака всё пересбросит и следующий инит пройдёт успешно.

Share this post


Link to post
Share on other sites

Вылазила у кого нибудь проблема с залочиванием процессора и не возможностью стереть через SWD ?

Вот что дает командер !

 

J-Link>unlock kinetis

Found SWD-DP with ID 0x2BA01477

Unlocking device...O.K.

J-Link>erase

Found SWD-DP with ID 0x2BA01477

 

****** Error: Kinetis (connect): Timeout while unsecuring device. Erase never st

arts.

Kinetis (connect): Failed to unsecure Kinetis device.

Found SWD-DP with ID 0x2BA01477

 

****** Error: Kinetis (connect): Timeout while unsecuring device. Erase never st

arts.

Kinetis (connect): Failed to unsecure Kinetis device.

Erasing device (MK66FX1M0xxx18)...

Found SWD-DP with ID 0x2BA01477

 

****** Error: Kinetis (connect): Timeout while unsecuring device. Erase never st

arts.

Kinetis (connect): Failed to unsecure Kinetis device.

Found SWD-DP with ID 0x2BA01477

 

****** Error: Kinetis (connect): Timeout while unsecuring device. Erase never st

arts.

Kinetis (connect): Failed to unsecure Kinetis device.

ERROR: Erase returned with error code -1.

J-Link>device MK66FX1M0xxx18

Disconnecting from J-Link...O.K.

Device "MK66FX1M0XXX18" selected.

 

 

Found SWD-DP with ID 0x2BA01477

 

****** Error: Kinetis (connect): Timeout while unsecuring device. Erase never st

arts.

Kinetis (connect): Failed to unsecure Kinetis device.

Found SWD-DP with ID 0x2BA01477

 

****** Error: Kinetis (connect): Timeout while unsecuring device. Erase never st

arts.

Kinetis (connect): Failed to unsecure Kinetis device.

Found SWD-DP with ID 0x2BA01477

 

****** Error: Kinetis (connect): Timeout while unsecuring device. Erase never st

arts.

Kinetis (connect): Failed to unsecure Kinetis device.

Found SWD-DP with ID 0x2BA01477

 

****** Error: Kinetis (connect): Timeout while unsecuring device. Erase never st

arts.

Kinetis (connect): Failed to unsecure Kinetis device.

Cannot connect to target.

Found SWD-DP with ID 0x2BA01477

 

****** Error: Kinetis (connect): Timeout while unsecuring device. Erase never st

arts.

Kinetis (connect): Failed to unsecure Kinetis device.

Found SWD-DP with ID 0x2BA01477

 

****** Error: Kinetis (connect): Timeout while unsecuring device. Erase never st

arts.

Kinetis (connect): Failed to unsecure Kinetis device.

J-Link>d

 

 

 

Есть какие либо решения ?

Share this post


Link to post
Share on other sites

Такая же проблема с залочиванием контроллера... (NXP MK22FN128xxx10)

 

* JLink Info: Protection bytes in flash at addr. 0x400 - 0x40F indicate that readout protection is set.

For debugger connection the device needs to be unsecured.

Note: Unsecuring will trigger a mass erase of the internal flash.

...

...

***JLink Error: Could not find core in Coresight setup

Error: Flash Erase failed - Target DLL has been cancelled

 

Кто-н знает решение?

Share this post


Link to post
Share on other sites
Кто-н знает решение?

Не знаю как в современных Кинетисах, но когда работал с разными LPC, то если возникали проблемы с работой JTAG/SWD, то всегда спасало подключение через FlashMagic к UART и полное стирание чипа (именно команда "стереть весь чип", а не отдельные сектора флешь).

 

PS: Странно однако - почему молчит адепт Кинетисов, присутствующий здесь? B)

Share this post


Link to post
Share on other sites
Такая же проблема с залочиванием контроллера... (NXP MK22FN128xxx10)

 

Кто-н знает решение?

Во первых микроконтроллеры часто, как ни странно, просто умирают. С этим ничего поделать нельзя.

Например взяли немытыми руками, и пробили по SWD DIO.

Тут просто выкидываем в урну.

Не далее как позавчера на моих глазах так убили.

Просто мужик взялся переключать чета-там на плате не отключив питания.

 

Во вторых народу очень полюбились китайские клоны. Ко мне коллега прибегает постоянно, то одно у него клон не программирует, то другое.

В третьих сама схемотехника SWD на плате может быть слегка кривоватой.

 

Короче, не важно что показывает JFlash, важно что было до этого.

 

 

Share this post


Link to post
Share on other sites

:bb-offtopic:

Во первых микроконтроллеры часто, как ни странно, просто умирают. С этим ничего поделать нельзя.

 

Да, микроконтроллер смертен, но это было бы ещё полбеды. Плохо то, что он иногда внезапно смертен, вот в чём фокус!
Воланд

Share this post


Link to post
Share on other sites

Про немытые руки особенно понравилось. :biggrin:

 

Share this post


Link to post
Share on other sites
Про немытые руки особенно понравилось. :biggrin:

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

Share this post


Link to post
Share on other sites

Статика конечно иногда имеет место быть, но очень не хочется в это верить... Один экземпляр из 3х работает - стирается/шьется исправно.

JLink конечно китайский, но неужели нельзя верить логу, в котором сказано что установлена защита по таким-то адресам и что-то вроде бы читается.

 

Вот полный лог:

 

* JLink Info: InitTarget()

* JLink Info: Protection bytes in flash at addr. 0x400 - 0x40F indicate that readout protection is set.

For debugger connection the device needs to be unsecured.

Note: Unsecuring will trigger a mass erase of the internal flash.

* JLink Info: Executing default behavior previously saved in the registry.

* JLink Info: Device will be unsecured now.

* JLink Info: Found SW-DP with ID 0x2BA01477

* JLink Info: Scanning AP map to find all available APs

* JLink Info: AP[2]: Stopped AP scan as end of AP map has been reached

* JLink Info: AP[0]: AHB-AP (IDR: 0x24770011)

* JLink Info: AP[1]: JTAG-AP (IDR: 0x001C0000)

* JLink Info: Iterating through AP map to find AHB-AP to use

* JLink Info: AP[0]: Skipped. Invalid implementer code read from CPUIDVal[31:24] = 0x00

* JLink Info: AP[1]: Skipped. Not an AHB-AP

***JLink Error: Could not find core in Coresight setup

Error: Flash Erase failed - Target DLL has been cancelled

Flash Erase finished 10:48:54

 

Есть еще отладочная плата FRDM-K22F, пытались использовать ее программатор на OpenSDA, но там оказалось еще больше геморроя, хотя с установленным на отладочной MK22FN512 работает отлично.

 

Не знаю как в современных Кинетисах, но когда работал с разными LPC, то если возникали проблемы с работой JTAG/SWD, то всегда спасало подключение через FlashMagic к UART и полное стирание чипа (именно команда "стереть весь чип", а не отдельные сектора флешь).

 

PS: Странно однако - почему молчит адепт Кинетисов, присутствующий здесь? B)

 

В моем случае для отладки выведены SWD и JTAG, они предусмотрены по умолчанию, к тому же FlashMagic просто не поддерживает эти семейства.

 

Кто этот адепт? Таких людей должно быть ну очень мало, ибо уж слишком специфичный МК.

 

Share this post


Link to post
Share on other sites
Про немытые руки особенно понравилось. :biggrin:

А Вы что не в курсе что совсем недавно британскими учёными обнаружен новый вид электрогенерирующих бактерий?: https://www.infox.ru/news/232/science/medic...t-elektricestvo

Вот так - подержались за железный пинцет, а потом - хвать за чип (этим же пинцетом)! и уноси готовенького... :crying:

Так что, как тут уже советовали специалисты по кинетисам: чаще мойте руки и держитесь только за пинцеты из цветных металлов! :biggrin:

 

Кто этот адепт? Таких людей должно быть ну очень мало, ибо уж слишком специфичный МК.

Вы можете наблюдать его даже в этом топике. Тока он не признаётся, но все знают B)

Наберите в поиске "kinetis" по форуму. :rolleyes:

Share this post


Link to post
Share on other sites

Приветствую всех! Столкнулся со следующей проблемой...

 

Есть рабочий код Bootloader-а, который работает на отладочной плате FRDM-K22F. Он же при замене файлов стартапа и разметки памяти работает на моей плате на чипе MK22FN128VDC10.

Далее, заменили 128й чип на MK22FN512VDC12. Теперь Bootloader грузится в чип (из под KDS), но не работает, т.е. не коннектится к проге KinetisFlashTool...

Кто может подсказать в чем проблема? Заранее спасибо.

 

P.S. Есть другой Bootloader (Kinetis Bootloader v2.0.0, собранный в Keil), версия под 128й чип также работет нормально, а версия под 512й запускается только если поставить галочку на опции "Reset and Run" в настройках загрузки.

Причем после снятия и подачи снова питания на плату больше не стартует...

Share this post


Link to post
Share on other sites

Опытным путем было выяснено, что процессор(MK22FN512) не делает Reset при старте... вроде и pull-up ставил/убирал, и с конденсатором игрался... картина не меняется.

Где вы Адепт - очень нужно экспертное мнение

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now