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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> LPC1102 и SWD, Работает ли SWD при ~RESET = 0
Сергей Борщ
сообщение Aug 27 2011, 15:46
Сообщение #1


Гуру
******

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



С кортексами дела не имел, закладываю в схему 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мм пучком проводов, чего не хотелось бы.


--------------------
На любой вопрос даю любой ответ
"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
HARMHARM
сообщение Aug 28 2011, 15:16
Сообщение #2


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(Сергей Борщ @ Aug 27 2011, 18:46) *
Вопрос - пока я держу RESET зажатым, я смогу достучаться до камня по SWD и стереть неправильную программу (CRP не стоит, само собой)? Или же ~RESET блокирует SWD и камень в помойку?

Судя по разным обсуждениям на форумах и некоторым данным из даташитов, SWD не будет работать в состоянии сброса. Но это так, ИМХО.
LPC1114 у меня есть, но работать через SWD нечем.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Aug 28 2011, 20:00
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



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


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Aug 29 2011, 07:41
Сообщение #4


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Хм. Разве нельзя сделать эмуляцию ISP? При выходе из ресет проверять ножку, и в случае подключения программатора делать паузу перед запуском основной программы, скажем, секунд пять.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 29 2011, 08:41
Сообщение #5


Гуру
******

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



QUOTE (HARMHARM @ Aug 29 2011, 10:41) *
Хм. Разве нельзя сделать эмуляцию ISP? При выходе из ресет проверять ножку, и в случае подключения программатора делать паузу перед запуском основной программы, скажем, секунд пять.
Можно. Но во время отладки этого кода можно запросто "убить" камень.


--------------------
На любой вопрос даю любой ответ
"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
GetSmart
сообщение Aug 29 2011, 08:47
Сообщение #6


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Для начала, во время отладки, можно первой строкой в main() ставить цикл на 2-5 сек.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 29 2011, 09:23
Сообщение #7


Гуру
******

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



QUOTE (GetSmart @ Aug 29 2011, 11:47) *
Для начала, во время отладки, можно первой строкой в main() ставить цикл на 2-5 сек.
Да, пожалуй так и сделаю.


--------------------
На любой вопрос даю любой ответ
"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
Ya. Kolmakov
сообщение Aug 29 2011, 19:13
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 224
Регистрация: 1-05-06
Из: С-Петербург
Пользователь №: 16 657



Цитата(Сергей Борщ @ Aug 29 2011, 13:23) *


Сергей,
А вы прошивать через UART пробовали? Я несколько раз прочел в документацию и так не понял - проц сам переходит в режим программирования по UART или для этого что то надо сделать?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 30 2011, 06:03
Сообщение #9


Гуру
******

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



QUOTE (Ya. Kolmakov @ Aug 29 2011, 22:13) *
проц сам переходит в режим программирования по UART или для этого что то надо сделать?
Существует три входа в заводской загрузчик (ISP):
1) В проце нет пользовательской программы. В этом случае после сброса безусловно запускается загрузчик.
2) Во время сброса нога P0.1 прижата к земле
3) Из пользовательской программы осуществлен переход на точку входа в процедуру ISP.

Поскольку у LPC1102 на ногу P0.1 места не хватило, то остаются первый и третий способы. Первый доступен в чистом кристалле с завода, третий нужно (можно) предусматривать в вашей программе.


--------------------
На любой вопрос даю любой ответ
"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
esaulenka
сообщение Sep 8 2011, 12:50
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Сергей, если интересно.
Проверял на 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


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
RA3WUM
сообщение Sep 13 2011, 05:01
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-02-07
Пользователь №: 25 578



Цитата(esaulenka @ Sep 8 2011, 16:50) *
Проверял на LPC1111.
Первая попытка - нога rst выведена на разъем отладки. Вторая попытка - добавил перемычку на землю.
...
WARNING: Supply voltage too low, disconnecting target!

По-видимому сигнал Vref не выведен на разъём отладки или по каким-то ещё причинам отладчик не может измерить напряжение питания.
У меня плата на LPC1114, все сигналы для SWD идут напрямую без подтяжек. В том числе reset.
МК стабильно шьётся.


--------------------
Мужество есть лишь у тех, кто ощутил сердцем страх!
В. Кипелов, Беги за солнцем.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 13 2011, 07:28
Сообщение #12


Гуру
******

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



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


--------------------
На любой вопрос даю любой ответ
"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
esaulenka
сообщение Sep 13 2011, 09:20
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(RA3WUM @ Sep 13 2011, 09:01) *
По-видимому сигнал Vref не выведен на разъём отладки или по каким-то ещё причинам отладчик не может измерить напряжение питания.

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

Вот между этими строками я выключал питание и паял соплю между резетом и землёй:

Код
WARNING: Supply voltage too low, disconnecting target!
Disconnecting ...
- Disconnected
Connecting ...


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Andrei0686
сообщение Sep 21 2011, 16:43
Сообщение #14





Группа: Новичок
Сообщений: 4
Регистрация: 19-07-11
Пользователь №: 66 294



Привет всем! Столкнулся с небольшой проблемой использовал такие же конструкции с 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 все работает как надо но в реальном микроконтроллере не работает. Подскажите что я делаю не так?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 21 2011, 19:38
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(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 все работает как надо но в реальном микроконтроллере не работает. Подскажите что я делаю не так?

уверены, что в правильную ветку запостили?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:37
Рейтинг@Mail.ru


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