реклама на сайте
подробности

 
 
> LPC1112FD/102 не входит в режим программирования
Pat
сообщение Nov 5 2014, 21:23
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Здравствуйте.

Суть проблеммы.
Есть софт не мой разбираюсь с ним.
Проект сделан LPCXpresso.

Решил подключить МК LPC1112 к отладчику.
Попробовал к ST-Link2 в принципе все получилось.
Вначале в IAR соэдал тестовый проектик залил в контроллер посредством St-Link.
Все работает шагает.

Потом в LPCXpresso настроил связку openOcd - GDB.
Немного конечно пришлось пошаманить, но в итоге тоже все завелось.
Контроллер шъется правда через раз и пошагать можно.

Все работало до первого отключения питания, после чего openOcd перестал опозновать плату.

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

Что это может быть защита установилась?
С софтом еще до конца не разобрался да и МК для меня новый.

Есть ли возможность вернуть микроконтроллер к жизни через SWD.
Можно ли ему сделать полное стирание?

Лазил осцилографом, обнаружил, при входе в отладку, отладчик дергает RESET а он в 0 не ложится, какой то третьий уровень висит.

Буду благодарен советам.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 11)
Сергей Борщ
сообщение Nov 6 2014, 00:25
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Если вы перенастроили P0.0/RESET в режим порта - то примерно так и должно быть. Можно прижать Reset к земле, подать питание и попытаться подключиться через openOCD не отпуская reset. Надо только правильно объявить конфигурацию ноги сброса в openOCD. Как именно - не подскажу, не делал, но часто встречал такую рекомендацию в списке рассылки. Надо копать документацию. Что-то там было насчет connect under reset.

Однако вот какая странность - я вообще не использую ногу Reset для отладчика и все работает. Конфигурация сброса в openOCD по-умолчанию. Видимо вы не только Reset, но и ноги SWD перенастроили. В этом случае может помочь только подключение с зажатым Reset


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Pat
сообщение Nov 6 2014, 17:10
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Цитата(Сергей Борщ @ Nov 6 2014, 02:25) *
Если вы перенастроили P0.0/RESET в режим порта - то примерно так и должно быть.
Можно прижать Reset к земле, ....
Что-то там было насчет connect under reset.


Сергей, спасибо за ответ.

Я сам не перенастраивал, может в софте это имеет место.
Особенностей проца вообще не знаю.
Да и софт еще изучать и изучать.
При первом просмотре не нахожу каких то манипуляций с переферией, да и вывод RESET висит в воздухе.
В LPC1112 можно функции альтернативным портам задать программно?

При запуске openOcd, RESET пробовал прижимать к земле в разных вариациях нет результата.

Хм ну если накосячил, там закрыл проц, переназначил выводы неужели нет способа сделать возврат к состоянию по умолчанию со стиранием флеша.

Эти процы вообще чем шьют, так понял пишут их по UART.
Только не найду пример программатора.

Пока буду читать про конфигурацию сброса в openOcd.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 6 2014, 18:57
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Вот, из сегодняшней рассылки:

Цитата
The solution is to add connect_assert_srst to your reset_config, then OpenOCD will assert reset before and during examination and you get control with the chip halted at the reset vector.



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Pat
сообщение Nov 7 2014, 18:53
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Цитата(Сергей Борщ @ Nov 6 2014, 20:57) *
Вот, из сегодняшней рассылки:


Нет не помогло.
Я читал, читал и вычитал wink.gif.
Разобрался однако.

Так по порядку.

Источник проблеммы был в следующем.
Чип был закрыт.
Закрываются он прикольно при помощи скрипта линкера.

Нужна всего одна строчка в коде вот так

__CRP const unsigned int CRP_WORD = CRP_CRP2;

// Disables SWD debugging & JTAG, leaves UART ISP with with only full erase
// enabled. You must have UART access and FlashMagic before setting this
// option.
// Don't even try this without these tools; most likely the SWD flash
// programming will not even complete.
#define CRP_CRP2 0x87654321

Другими словами у меня был отключен SWD и соответсвенно openOcd чип не видел.

Интересно следующее, в ходе моих экспирементов я подключился через JLink и JFlashARM чип увидел.
Но ничего сделать не смог.

Мои заключения закончились когда я выкачал Flash Magiс и через ISP стер LPC1112.

Вроде как все заработало.

Теперь, следующая проблемма моя связка LPCXpreso->openOcd очень криво работает.
Чип вроде как шъется но почему то становится на адрес в boot ROM.
Причем это вечный цикл.

Но иногда он и нормально отрабатывает.

Ладно копаем дальше.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 7 2014, 21:29
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Pat @ Nov 7 2014, 20:53) *
Чип вроде как шъется но почему то становится на адрес в boot ROM.
Так это же просто:
Цитата
The bootloader code is executed every time the part is powered on or reset. The loader
can execute the ISP command handler or the user application code. A LOW level after
reset at the PIO0_1 pin is considered as an external hardware request to start the ISP
command handler either via UART or C_CAN, if present.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Pat
сообщение Nov 13 2014, 21:38
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Цитата(Сергей Борщ @ Nov 7 2014, 23:29) *
Так это же просто:


В том то и дело программа там висит и не хочет ...

Что то замучился я.
ИАР шъет LPC1112 без вопросов.
Остальное никак не могу запустить.
Особенно связку gdb - openocd.

opendocd вроде как подключается вот лог
Код
C:\openocd>openocd.exe  -f debug_lpc1112.cfg
Open On-Chip Debugger 0.6.0-dev-00550-g4257cb7-dirty (2012-06-05-17:01)
Licensed under GNU GPL v2
For bug reports, read
         http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : OpenOCD runs in SWD mode
1000 kHz
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
10 kHz
adapter_nsrst_delay: 200
cortex_m3 reset_config sysresetreq
Info : Versaloon(0x15)by Simon(compiled on Nov  9 2013)
Info : USB_TO_XXX abilities: 0x0000176E:0x010001EF:0xC0000007
Info : clock speed 10 kHz
Info : lpc1112.cpu: hardware has 4 breakpoints, 2 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x1fff0040 msp: 0x10000ffc


Тут подключаюсь через адаптер Versaloon.
Но это не важно с другими адаптерами та же песня.

Причем только смог подключится через openOcd-0.6.0
восьмерка не захотела работать ругаясь на транспорт swd

Может есть у кого рабочие файлы скриптов для LPC1112?
Дайте если не жалко.

И почему openocd-0.8 не работает?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 14 2014, 11:42
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Pat @ Nov 13 2014, 23:38) *
Код
xPSR: 0xc1000000 pc: 0x1fff0040 msp: 0x10000ffc
Тут видно, что процессор находится во встроенном загрузчике. Встроенный загрузчик запускается низким уровнем на ноге PIO0_1. Проверьте, не притянута ли эта нога у вас к земле. Это раз. Второе - у LPC есть "фишка" - контроллер при старте проверяет контрольную сумму начального участка области векторов. И если эта сумма не совпала - контроллер считает, что программы нет и уходит во встроенный загрузчик. IAR эту контрольную сумму добавляет на лету во время загрузки. Родная утилита загрузки через ISP тоже добавляет эту сумму. OpenOCD сам ничего не добавляет, значит проблема может быть в том, что ваш файл не содержит контрольной суммы. Если это так, то вариантов решения два:
1) немного изменить стартап-файл и скрипт линкера, чтобы заставить линкер считать эту сумму и вставлять в нужное место.
2) в скрипте OpenOCD добавить функцию, исполняющуюся после сброса и в этой функции сделать принудительный ремап на флеш, считать из таблицы векторов начальное значение стека в MSP, считать адрес вектора сброса и занести его в PC.

Цитата(Pat @ Nov 13 2014, 23:38) *
Причем только смог подключится через openOcd-0.6.0
восьмерка не захотела работать ругаясь на транспорт swd
Там синтаксис этих опций менялся. Я работал с LPC1114 и восьмой версией OpenOCD и девятой.

Цитата(Pat @ Nov 13 2014, 23:38) *
Может есть у кого рабочие файлы скриптов для LPC1112?
Дайте если не жалко.
В текущей версии из репозитория уже есть готовые скрипты для LPC11xx в комплекте. Но они заточены именно под эту последнюю версию, поэтому надо брать ее целиком. Отдельно скрипты к старой версии не подойдут. И, кстати, там исправлено множество ошибок (одну с прошивкой именно LPC11xx исправлял я) и недоработок, поэтому я вам очень не советую бороться со старыми версиями. Берите последнюю - в ней все работает.


Если захотите считать контрольную сумму линкером, то вот как я делал:
1) В cstartup разбил таблицу векторов на две части (до и после контрольной суммы).
Код
extern uint32_t _estack[];
typedef void( * const intfunc )( void );

__attribute__ ((section(".isr_vector_part1")))
intfunc g_pfnVectors_part1[] =
{
    /* Core interrupt vectors */
    (intfunc)_estack,
    Reset_Handler,
    NMI_Handler,
    HardFault_Handler,
    MemManage_Handler,
    BusFault_Handler,
    UsageFault_Handler
};

__attribute__ ((section(".isr_vector_part2")))
intfunc g_pfnVectors_part2[] =
{
    0,
    0,
    0,
    SVC_Handler,
    DebugMon_Handler,
    0,
    PendSVC_ISR,
    SystemTimer_ISR,
.........

В скрипте линкера разместил эти две секции и сумму между ними:
Код
    .text :
    {
        . = ALIGN(4);
        KEEP(*(.isr_vector_part1))
        LONG(0 - (6 + _estack + Reset_Handler + NMI_Handler + HardFault_Handler + MemManage_Handler + BusFault_Handler + UsageFault_Handler));
        KEEP(*(.isr_vector_part2))

        /* code read protection */
        . = 0x2FC;
/*        LONG(0x87654321);*/
        
        . = ALIGN(4);
..............


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 14 2014, 12:37
Сообщение #9


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Сергей Борщ @ Nov 14 2014, 15:42) *
....
Если это так, то вариантов решения два:
1) немного изменить стартап-файл и скрипт линкера, чтобы заставить линкер считать эту сумму и вставлять в нужное место.
2) в скрипте OpenOCD добавить функцию, исполняющуюся после сброса и в этой функции сделать принудительный ремап на флеш, считать из таблицы векторов начальное значение стека в MSP, считать адрес вектора сброса и занести его в PC.

Есть ещё вариант расчета от Oleksandr O. Redchuk aka ReAl. Он реализован в порте GCC для LPC17xx CortexM3 в scmRTOS. Расчет из makefile, используется srecord.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Pat
сообщение Nov 16 2014, 14:01
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Цитата(Сергей Борщ @ Nov 14 2014, 13:42) *
Тут видно, что процессор находится во встроенном загрузчике. Встроенный загрузчик запускается низким уровнем на ноге PIO0_1.


Сергей, спасибо Вам за ответы.

Висит в воздухе этот пин.

Продолжаю изыскания, что то они у меня затянулись.

Выкачал openocd-0.9.0-dev-141103193059
Пытаюсь подключится через ST-Link не получается лог ниже

Код
C:\openocd-0.9.0-dev-141103193059>debug_stlink_lpc1112.bat
  
  C:\openocd-0.9.0-dev-141103193059>bin-x64\openocd-x64-0.9.0-dev-141103193059.exe  -f scripts\interface\stlink-v2.cfg -f scripts\target\lpc11xx.cfg
  Open On-Chip Debugger 0.9.0-dev-00186-g30203b3 (2014-11-13-22:44)
  Licensed under GNU GPL v2
  For bug reports, read
          http://openocd.sourceforge.net/doc/doxygen/bugs.html
  Error: session's transport is not selected.
  Info : session transport was not selected, defaulting to JTAG
  Error: Debug adapter doesn't support 'swd' transport
  Runtime Error: embedded:startup.tcl:20:
  in procedure 'script'
  at file "embedded:startup.tcl", line 58
  at file "scripts\target\lpc11xx.cfg", line 8
  at file "C:/openocd-0.9.0-dev-141103193059//scripts/target/lpc1xxx.cfg", line 17
  in procedure 'transport' called at file "C:/openocd-0.9.0-dev-141103193059//scripts/target/swj-dp.tcl", line 23
  in procedure 'ocd_bouncer'
  at file "embedded:startup.tcl", line 20


Пишет что транспорт не выбран, пытаюсь выбрать транспорт
C:\openocd-0.9.0-dev-141103193059>bin-x64\openocd-x64-0.9.0-dev-141103193059.exe -c "transport select swd" -f scripts\interface\stlink-v2.cfg -f scripts\target\lpc11xx.cfg

Код
C:\openocd-0.9.0-dev-141103193059>bin-x64\openocd-x64-0.9.0-dev-141103193059.exe -c "transport select swd" -f scripts\interface\stlink-v2.cfg -f scripts\target\lpc11xx.cfg
  Open On-Chip Debugger 0.9.0-dev-00186-g30203b3 (2014-11-13-22:44)
  Licensed under GNU GPL v2
  For bug reports, read
          http://openocd.sourceforge.net/doc/doxygen/bugs.html
  Error: Debug adapter doesn't support any transports?
  Runtime Error: embedded:startup.tcl:20:
  in procedure 'transport'
  in procedure 'ocd_bouncer'
  at file "embedded:startup.tcl", line 20


Не работает
Причем так же не могу подключится и к чипу STM32F в рабочей плате.
ИАР сходу заливает что в LPC что STM32.
Пробовал на еще одном компе с WinXp результат тот же.
Что же я делаю не так.

Экспирементов было много, пробовал менять драйвера и прочее.

Добавлю

Только что собрал из исходников openocd (это я уже от того, что нужно, что то делать делаю) картина таже.

Уже обрыл весь интернет у всех вроде просто запускается.
Что у меня не так...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 16 2014, 20:44
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Pat @ Nov 16 2014, 16:01) *
Что у меня не так...
Вы сначала выбираете транспорт, а потом адатер. Попробуйте поменять местами -f scripts\interface\stlink-v2.cfg и -c "transport select swd"


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Pat
сообщение Nov 16 2014, 21:31
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Цитата(Сергей Борщ @ Nov 16 2014, 22:44) *
Вы сначала выбираете транспорт, а потом адатер. Попробуйте поменять местами -f scripts\interface\stlink-v2.cfg и -c "transport select swd"


Все то же

Код
       C:\openocd-0.9.0-dev-141103193059>bin-x64\openocd-x64-0.9.0-dev-141103193059.exe -d1 -f scripts\interface\stlink-v2-1.cfg -c "transport select swd" -f scripts\target\stm32f1x.cfg
       Open On-Chip Debugger 0.9.0-dev-00186-g30203b3 (2014-11-13-22:44)
       Licensed under GNU GPL v2
       For bug reports, read
               http://openocd.sourceforge.net/doc/doxygen/bugs.html
       debug_level: 1
       Error: Debug adapter doesn't support 'swd' transport
       Runtime Error: embedded:startup.tcl:20:
       in procedure 'transport'
       in procedure 'ocd_bouncer'
       at file "embedded:startup.tcl", line 20


Из всего моего зоопарка отладчиков только один vsllink подключается к LPC, но работать через gdb не хочет.
Причем он подключается без сброса.
Вот лог
Код
       C:\openocd-0.9.0-dev-141103193059>bin-x64\openocd-x64-0.9.0-dev-141103193059.exe   -f scripts\interface\vsllink.cfg -f scripts\target\lpc11xx.cfg
       Open On-Chip Debugger 0.9.0-dev-00186-g30203b3 (2014-11-13-22:44)
       Licensed under GNU GPL v2
       For bug reports, read
               http://openocd.sourceforge.net/doc/doxygen/bugs.html
       Error: session's transport is not selected.
       Info : session transport was not selected, defaulting to JTAG
       Info : VSLLink SWD mode enabled
       adapter speed: 10 kHz
       adapter_nsrst_delay: 200
       cortex_m reset_config sysresetreq
       Info : Versaloon(0x15)by Simon(compiled on Nov  9 2013)
       Info : USB_TO_XXX abilities: 0x0000176E:0x010001EF:0xC0000007
       Info : clock speed 10 kHz
       Info : SWD IDCODE 0x0bb11477
       Info : lpc11xx.cpu: hardware has 4 breakpoints, 2 watchpoints


Ему даже не нужно указывать транспорт. Вернее я его поменял в файле swj-dp.tcl

Затем пытаюсь к нему подключится
Код
       Info : accepting 'gdb' connection on tcp/3333
       undefined debug reason 7 - target needs reset
       Error: Fail to receive usb data.
       Error: usbtoswd command 0x28 failed with 0x28
       Error: Invalid length of return data
       Error: usbtoswd command 0x28 failed with 0x61
       Error: Invalid length of return data
       Error: Failed to write memory at 0x00000fe0
       Warn : negative acknowledgment, but no packet pending
       Warn : negative acknowledgment, but no packet pending
       Info : dropped 'gdb' connection


Я уже (опять таки от нечего делать) собрал openocd под Debian результат тот же.
Но в ИАР работает тот же St-Link

Да сам софт пересобрал по Вашей рекомендации изменив стартап-файл и скрипт линкера.
Его и пытаюсь залить.

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01475 секунд с 7
ELECTRONIX ©2004-2016