|
АЦП LPC1758 (недопустимое значение регистра ADTRIM) |
|
|
|
Jun 28 2016, 03:31
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Столкнулся с проблемой с АЦП в давно выпускаемом устройстве на LPC1758. Модифицировали прошивку и перестало работать АЦП - выдаёт всё время 0xFFF (АЦП 12-битный). Заливаешь старую прошивку - АЦП работает, значения меняются, новую - не работает. Код инициализирующий периферию (ноги, PLL, другие порты и т.п.) - в новой прошивке абсолютно без изменений, код работающий с АЦП - тоже старый (файлы исходников байт-в-байт одинаковы). После разборок выяснилось, что при старте ПО содержимое регистра ADTRIM разное: при старте старой прошивки там как и указано в даташите ==0xF00, при старте новой прошивки там почему то ==0. Т.е.: ставлю процедуру инициализации АЦП в ассемблерный стартап-файл, третьей командой (первые две - запреты прерываний), в этой процедуре включаю тактирование АЦП и сразу считываю регистр ADTRIM - и вижу что в старой прошивке там опять как должно быть ==0xF00, а в новой =0. Про этот регистр в даташите говорится, что он записывается boot-кодом и после записи калибровочных значений в младшие 8 бит, boot-код должен в биты 8-11 записать единицы, заблокировав тем самым модификацию этого регистра. Получается, что boot-код каким-то образом определяет какая прошивка (старая версия или новая) и записывает или не записывает туда эти единицы в биты 8-11. Много раз перешивал то старую прошивку, то новую (и размер их сделал одинаковыми на всякий случай) - после каждой перепрошивки в ADTRIM было 0xF00 для старой и 0 - для новой. Бред какой-то!!! Если при старте устройства, обнаружив что в битах 8-11 нули, записать туда единички (что должен делать boot-код), то АЦП начинает работать нормально. Даташиты и ерраты все перерыл - на этот счёт там тишина. Пока сделал костыль: если в битах 8-11 нули - пишу туда сам при старте ПО единицы. Но не понятно что писать в биты 0-7 (там калибровочные значения). И непонятно что будет дальше в других экземплярах МК? Кто-нибудь сталкивался с этой проблемой?
|
|
|
|
|
 |
Ответов
|
Jun 28 2016, 10:55
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(ViKo @ Jun 28 2016, 16:08)  А если InitADC выполнить позже, поменять с чем-нибудь? Оно и так позже стояло, это я в самое начало воткнул когда искал проблему. Думал может в коде который до неё выполняется где-то портится содержимое регистров управления АЦП или тактирования или ещё чего. А в нормальном рабочем коде оно выполняется более чем через 130мс после старта, после кучи всякой другой инициализации (других драйверов железа). И в рабочем коде чтение ADC идёт через DMA в burst-режиме. А когда искал баг я пробовал и в режиме программного запуска АЦП читать - значения одни и те же. В даташите указывается что bootcode должен записать в ADTRIM значение некоего коэффициента, а потом установить lock-биты (8-11). Получается в каких-то случаях он этого не делает...... Код bits 3:0 - reserved. NA bits 7:4 - ADCOFFS Offset trim bits for ADC operation. Initialized by the boot code. Can be overwritten by the user. reset value = 0 bits 11:8 - TRIM written-to by boot code. Can not be overwritten by the user. These bits are locked after boot code write. reset value = 1111
|
|
|
|
|
Jun 28 2016, 13:40
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Alechek @ Jun 28 2016, 19:27)  Слабо верится в то, что содержимое рабочей области флэша влияет на загрузчик. Более верю в то, что выполняется рабочий код с ошибкой, поганит что-то, потом происходит сброс (переход на AppStart) и далее с вытекающими. Происходит сброс и что? После сброса должен выполниться bootcode, который должен проинитить этот ADTRIM. Управление на AppStart само не попадает, его передаёт туда bootcode. При подключении JTAG-а, он тоже выдаёт сброс (тип сброса: core and peripheral). Цитата(Alechek @ Jun 28 2016, 19:27)  Совет поставить бряку на ADTRIM остается в силе. Даже если оно завязано на заводской загрузчик, по коду можно понять, в чем дело. Можно попробовать, хотя не знаю что это даст если внутри bootcode туда будет что-то писаться.
|
|
|
|
|
Jun 29 2016, 04:40
|
Профессионал
    
Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882

|
Цитата(jcxz @ Jun 28 2016, 18:40)  Происходит сброс и что? После сброса должен выполниться bootcode, который должен проинитить этот ADTRIM. Управление на AppStart само не попадает, его передаёт туда bootcode. Вторичный загрузчик есть? WDT используется? И да, заводской загрузчик ничего не знает о вашем APP_START. Он всего лишь подменяет адресное пространство с 0-го адреса на пользовательску флешь и выполняет сброс ядра (или его программную эмуляцию). И запускается загрузчик _только_ при аппаратном сбросе. Сброс по JTAG сбросом не считатся, так как адресное пространство уже настроено на пользовательскую флешь.
|
|
|
|
Сообщений в этой теме
jcxz АЦП LPC1758 (недопустимое значение регистра ADTRIM) Jun 28 2016, 03:31 ViKo Может быть, вы не выдерживаете какие-то времена, п... Jun 28 2016, 05:28 jcxz Цитата(ViKo @ Jun 28 2016, 11:28) Может б... Jun 28 2016, 05:53 Alechek Значит, запукать дебагер с брякой на запись даных ... Jun 28 2016, 06:11 jcxz Цитата(Alechek @ Jun 28 2016, 12:11) Знач... Jun 28 2016, 06:45 ViKo У STM есть datasheet, в нем все времена описаны. Г... Jun 28 2016, 08:02 jcxz Цитата(ViKo @ Jun 28 2016, 14:02) У STM е... Jun 28 2016, 08:18  ViKo Цитата(jcxz @ Jun 28 2016, 11:18) Я же уж... Jun 28 2016, 08:56   jcxz Цитата(ViKo @ Jun 28 2016, 14:56) Понятно... Jun 28 2016, 09:38     jcxz Цитата(Alechek @ Jun 29 2016, 10:40) Втор... Jun 29 2016, 07:02 zltigo Абстрагируйтесь от этого несчастного ADTRIM - ADC,... Jun 28 2016, 14:49 jcxz Цитата(zltigo @ Jun 28 2016, 20:49) Абстр... Jun 29 2016, 04:04  zltigo QUOTE (jcxz @ Jun 29 2016, 07:04) Возможн... Jun 29 2016, 04:27  KRS Цитата(jcxz @ Jun 29 2016, 07:04) И по ка... Jun 29 2016, 06:07 Obam " А зачем тогда среди сигналов JTAG есть сигн... Jun 29 2016, 08:13 jcxz Цитата(Obam @ Jun 29 2016, 14:13) " ... Jun 29 2016, 08:17  Obam Цитата(jcxz @ Jun 29 2016, 12:17) И...?
... Jun 29 2016, 08:55 Alechek И
Цитата("UM10360")The flash boot loader... Jun 29 2016, 09:06 jcxz Цитата(Alechek @ Jun 29 2016, 15:06) ... Jun 29 2016, 09:36 Alechek По \TRST периферия НЕ СБРАСЫВАЕТСЯ.
А вот дал... Jun 29 2016, 10:26 jcxz Цитата(Alechek @ Jun 29 2016, 16:26) По ... Jun 29 2016, 10:37  KRS Цитата(jcxz @ Jun 29 2016, 13:37) Наверно... Jun 30 2016, 08:34   jcxz Цитата(KRS @ Jun 30 2016, 14:34) IMHO луч... Jun 30 2016, 08:54    jcxz Цитата(KRS @ Jun 30 2016, 14:34) IMHO луч... Jul 10 2016, 06:01 Alechek Сейчас занимаюсь с LPC1754. В настройках JLINK сто... Jun 29 2016, 18:34 jcxz Цитата(Alechek @ Jun 30 2016, 00:34) Сейч... Jun 30 2016, 03:07
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|