Jump to content

    
Sign in to follow this  
Сергей Борщ

LPC1102 и SWD

Recommended Posts

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

Share this post


Link to post
Share on other sites
Вопрос - пока я держу RESET зажатым, я смогу достучаться до камня по SWD и стереть неправильную программу (CRP не стоит, само собой)? Или же ~RESET блокирует SWD и камень в помойку?

Судя по разным обсуждениям на форумах и некоторым данным из даташитов, SWD не будет работать в состоянии сброса. Но это так, ИМХО.

LPC1114 у меня есть, но работать через SWD нечем.

Share this post


Link to post
Share on other sites

Хм. Разве нельзя сделать эмуляцию ISP? При выходе из ресет проверять ножку, и в случае подключения программатора делать паузу перед запуском основной программы, скажем, секунд пять.

Share this post


Link to post
Share on other sites
Хм. Разве нельзя сделать эмуляцию ISP? При выходе из ресет проверять ножку, и в случае подключения программатора делать паузу перед запуском основной программы, скажем, секунд пять.
Можно. Но во время отладки этого кода можно запросто "убить" камень.

 

Share this post


Link to post
Share on other sites

 

Сергей,

А вы прошивать через UART пробовали? Я несколько раз прочел в документацию и так не понял - проц сам переходит в режим программирования по UART или для этого что то надо сделать?

Share this post


Link to post
Share on other sites
проц сам переходит в режим программирования по UART или для этого что то надо сделать?
Существует три входа в заводской загрузчик (ISP):

1) В проце нет пользовательской программы. В этом случае после сброса безусловно запускается загрузчик.

2) Во время сброса нога P0.1 прижата к земле

3) Из пользовательской программы осуществлен переход на точку входа в процедуру ISP.

 

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

 

Share this post


Link to post
Share on other sites

Сергей, если интересно.

Проверял на 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

 

Share this post


Link to post
Share on other sites
Проверял на LPC1111.

Первая попытка - нога rst выведена на разъем отладки. Вторая попытка - добавил перемычку на землю.

...

WARNING: Supply voltage too low, disconnecting target!

По-видимому сигнал Vref не выведен на разъём отладки или по каким-то ещё причинам отладчик не может измерить напряжение питания.

У меня плата на LPC1114, все сигналы для SWD идут напрямую без подтяжек. В том числе reset.

МК стабильно шьётся.

Share this post


Link to post
Share on other sites
По-видимому сигнал Vref не выведен на разъём отладки или по каким-то ещё причинам отладчик не может измерить напряжение питания.

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

 

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

 

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

Share this post


Link to post
Share on other sites

Привет всем! Столкнулся с небольшой проблемой использовал такие же конструкции с 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 все работает как надо но в реальном микроконтроллере не работает. Подскажите что я делаю не так?

Share this post


Link to post
Share on other sites
Привет всем! Столкнулся с небольшой проблемой использовал такие же конструкции с 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 все работает как надо но в реальном микроконтроллере не работает. Подскажите что я делаю не так?

уверены, что в правильную ветку запостили?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this