Полная версия этой страницы:
LPC1102 и SWD
Сергей Борщ
Aug 27 2011, 15:46
С кортексами дела не имел, закладываю в схему LPC1102 (габариты жмут). Курю описание. Там сказано, что нет специальной ноги для принудительного запуска загрузчика. Рекомендуют запуск ISP предусматривать в программе. Но поскольку проект первый, то вполне вероятно записать в проц программу, которая не то что ISP не запустит - вообще камень на лопатки положтит. А ног и так мало, ноги SWD естественно будут заняты под SPI и нога SWCLK превратится в SPI CLK. В инструкции сказано, что в этом случае SWD отключается. Также будет занята и нога P0.0/~RESET. Изучив описание еще раз, возник такой вопрос: при подаче питания нога P0.0 работает как ~RESET. Зажав его, я не даю запуститься моей программе и не допускаю перепрограммирования функций ног ~RESET и SWCLK. Вопрос - пока я держу RESET зажатым, я смогу достучаться до камня по SWD и стереть неправильную программу (CRP не стоит, само собой)? Или же ~RESET блокирует SWD и камень в помойку? В таком случае надо будет отрабатывать программу на чем-то более многоногом и безопасном, например LPC1114, подпаивая его к полю из 4х4 площадок с шагом 0.5мм пучком проводов, чего не хотелось бы.
HARMHARM
Aug 28 2011, 15:16
Цитата(Сергей Борщ @ Aug 27 2011, 18:46)

Вопрос - пока я держу RESET зажатым, я смогу достучаться до камня по SWD и стереть неправильную программу (CRP не стоит, само собой)? Или же ~RESET блокирует SWD и камень в помойку?
Судя по разным обсуждениям на форумах и некоторым данным из даташитов, SWD не будет работать в состоянии сброса. Но это так, ИМХО.
LPC1114 у меня есть, но работать через SWD нечем.
DpInRock
Aug 28 2011, 20:00
Перед назначением SPI сделать полсекундную задержку.
HARMHARM
Aug 29 2011, 07:41
Хм. Разве нельзя сделать эмуляцию ISP? При выходе из ресет проверять ножку, и в случае подключения программатора делать паузу перед запуском основной программы, скажем, секунд пять.
Сергей Борщ
Aug 29 2011, 08:41
QUOTE (HARMHARM @ Aug 29 2011, 10:41)

Хм. Разве нельзя сделать эмуляцию ISP? При выходе из ресет проверять ножку, и в случае подключения программатора делать паузу перед запуском основной программы, скажем, секунд пять.
Можно. Но во время отладки этого кода можно запросто "убить" камень.
GetSmart
Aug 29 2011, 08:47
Для начала, во время отладки, можно первой строкой в main() ставить цикл на 2-5 сек.
Сергей Борщ
Aug 29 2011, 09:23
QUOTE (GetSmart @ Aug 29 2011, 11:47)

Для начала, во время отладки, можно первой строкой в main() ставить цикл на 2-5 сек.
Да, пожалуй так и сделаю.
Ya. Kolmakov
Aug 29 2011, 19:13
Цитата(Сергей Борщ @ Aug 29 2011, 13:23)

Сергей,
А вы прошивать через UART пробовали? Я несколько раз прочел в документацию и так не понял - проц сам переходит в режим программирования по UART или для этого что то надо сделать?
Сергей Борщ
Aug 30 2011, 06:03
QUOTE (Ya. Kolmakov @ Aug 29 2011, 22:13)

проц сам переходит в режим программирования по UART или для этого что то надо сделать?
Существует три входа в заводской загрузчик (ISP):
1) В проце нет пользовательской программы. В этом случае после сброса безусловно запускается загрузчик.
2) Во время сброса нога P0.1 прижата к земле
3) Из пользовательской программы осуществлен переход на точку входа в процедуру ISP.
Поскольку у LPC1102 на ногу P0.1 места не хватило, то остаются первый и третий способы. Первый доступен в чистом кристалле с завода, третий нужно (можно) предусматривать в вашей программе.
esaulenka
Sep 8 2011, 12:50
Сергей, если интересно.
Проверял на LPC1111.
Первая попытка - нога rst выведена на разъем отладки. Вторая попытка - добавил перемычку на землю.
Connecting ...
- Connecting via USB to J-Link device 0
- J-Link firmware: V1.20 (J-Link ARM V8 compiled Apr 27 2011 20:42:35)
- JTAG speed: 5 kHz (Fixed)
- Initializing CPU core (Init sequence) ...
- Initialized successfully
- JTAG speed: 4000 kHz (Fixed)
- CPU clock frequency: 11992 kHz (Auto detected)
- Connected successfully
WARNING: Supply voltage too low, disconnecting target!
Disconnecting ...
- Disconnected
Connecting ...
- Connecting via USB to J-Link device 0
- J-Link firmware: V1.20 (J-Link ARM V8 compiled Apr 27 2011 20:42:35)
- JTAG speed: 5 kHz (Fixed)
- Initializing CPU core (Init sequence) ...
- Initialized successfully
- JTAG speed: 4000 kHz (Fixed)
- ERROR: Failed to download RAMCode for CPU clock frequency detection!
- ERROR: Failed to measure CPU clock frequency
- ERROR: Failed to connect
RA3WUM
Sep 13 2011, 05:01
Цитата(esaulenka @ Sep 8 2011, 16:50)

Проверял на LPC1111.
Первая попытка - нога rst выведена на разъем отладки. Вторая попытка - добавил перемычку на землю.
...
WARNING: Supply voltage too low, disconnecting target!
По-видимому сигнал Vref не выведен на разъём отладки или по каким-то ещё причинам отладчик не может измерить напряжение питания.
У меня плата на LPC1114, все сигналы для SWD идут напрямую без подтяжек. В том числе reset.
МК стабильно шьётся.
Сергей Борщ
Sep 13 2011, 07:28
QUOTE (RA3WUM @ Sep 13 2011, 08:01)

МК стабильно шьётся.
Даже когда нога сброса в программе используется на порт?
esaulenka
Sep 13 2011, 09:20
Цитата(RA3WUM @ Sep 13 2011, 09:01)

По-видимому сигнал Vref не выведен на разъём отладки или по каким-то ещё причинам отладчик не может измерить напряжение питания.
Упс, забыл написать, что вместо того, чтобы по-человечески сделать disconnect, я просто щелкнул кнопкой питания.
Вот между этими строками я выключал питание и паял соплю между резетом и землёй:
Код
WARNING: Supply voltage too low, disconnecting target!
Disconnecting ...
- Disconnected
Connecting ...
Andrei0686
Sep 21 2011, 16:43
Привет всем! Столкнулся с небольшой проблемой использовал такие же конструкции с AVR под компиляторо IAR все работало, попробывал под LPC1114 контроллер уходит в аварийное прерывание как под iar так и под KEIL-ом.
Суть следующая:
пусть у нас есть массив с данными типа unsigned char mas[10]{0,1,2,3,4,5,6,7,8,9};
и есть переменная unsigned short LenData=0x0302;
Мне необходимо 2 и 3 байт массива сравнить с переменной LenData,
под AVR я делал так
if (LenData == *(unsigned short*)&mas[2])
{} и все работало, а как только я подставил данную конструкцию под LPC1114 То он сразу ушел в прерывание по сбою работы программы.
Причем при использовании эмулятора от KEIL все работает как надо но в реальном микроконтроллере не работает. Подскажите что я делаю не так?
toweroff
Sep 21 2011, 19:38
Цитата(Andrei0686 @ Sep 21 2011, 20:43)

Привет всем! Столкнулся с небольшой проблемой использовал такие же конструкции с AVR под компиляторо IAR все работало, попробывал под LPC1114 контроллер уходит в аварийное прерывание как под iar так и под KEIL-ом.
Суть следующая:
пусть у нас есть массив с данными типа unsigned char mas[10]{0,1,2,3,4,5,6,7,8,9};
и есть переменная unsigned short LenData=0x0302;
Мне необходимо 2 и 3 байт массива сравнить с переменной LenData,
под AVR я делал так
if (LenData == *(unsigned short*)&mas[2])
{} и все работало, а как только я подставил данную конструкцию под LPC1114 То он сразу ушел в прерывание по сбою работы программы.
Причем при использовании эмулятора от KEIL все работает как надо но в реальном микроконтроллере не работает. Подскажите что я делаю не так?
уверены, что в правильную ветку запостили?
Andrei0686
Sep 22 2011, 03:30
ну я тока начинаю работать с ARM 7. LPC1114 это ARM 7 32 -bit . и мне нужна помощь.
поэтому я и выбрал "В помощь начинающему > ARM, 32bit"
Цитата(Andrei0686 @ Sep 22 2011, 06:29)

ну я тока начинаю работать с ARM 7. LPC1114 это ARM 7 32 -bit . и мне нужна помощь.
поэтому я и выбрал "В помощь начинающему > ARM, 32bit"
пардон! че то ступил!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.