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

 
 
> Reinvoke ISP, LPC2388, Процессор отвечает не на все команды
Dreamer
сообщение Mar 26 2010, 10:12
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 13-01-06
Из: Санкт-Петербург
Пользователь №: 13 154



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

Хочу в процессе выполнения программы запустить бутлоадер и перепрошить программу.
Для этого в нужном мне месте программы вызываю команду загрузчика "Reinvoke ISP", старался делать все по юзер мануалу, но видимо, что-то недоделал.

Вот код:

Код
#define IAP_LOCATION 0x7ffffff1
unsigned long command[5]={0};
unsigned long result[3]={0};
typedef void (*IAP)(unsigned int[],unsigned int[]);
IAP iap_entry = (IAP)IAP_LOCATION;

#define ISP_OPTION_2
void PrepareProgCPU()
{
    VICINTENCLEAR = 0xFFFFFFFF;     // Disable all interrupts
#ifdef  ISP_OPTION_2     
    //по документации - в этом случае надо выключать плл и выбрать внутренний IRC
    MAMCR =  0; //читал, что в ранних ревизиях нужно отключать MAM, у меня ревизия B
    PLLCON  = 0x00;
    PLLFEED = 0xAA;
    PLLFEED = 0x55;
    CLKSRCSEL=0;
#endif //иначе исполняем с опцией "1" - pll не выключаем
    command[0] = 57;
    iap_entry(command,result);
}


В результате получаем следующую картину.
Вызываем в программе указанную функцию. Открываем терминал. Настраиваем (пока пользуюсь скоростью 9600).
Шлем в терминал символ "?".
Получаем ответ "Synhronized". Получается, что боотлоадер запустился и отвечает на команды.
Закрываем терминал, открываем флешмеджик. Настраиваем на те же параметры, делаем старт.
Происходит стирание флеша (в статусной строке проскакивают сообщения "Erasing block").
Далее в статусной строке пишется "Programming..."
После чего выводится сообщение "Anable to communicate (transmit/receive)". Программирование прекращается, если запустить терминал, на команды больше не отвечаем.

Далее отключаю питание. Включаю. Процессор не исполняет рабочую программу, находится в редиме загрузчика. Проверяю - запускаю флешмеджик, делаю "старт" - программируется "на ура", причем с любой скоростью.

Компилирую программу с "#define ISP_OPTION_1". Это допустимо, как утверждается в документации, при этом должна установиться PCLK = CCLK/4.
У меня используется частота 72 мегагерца, если поделить на 4, получается 18, для скорости 9600 это допустимое значение.

Тестируем, получаем абсолютно идентичный результат.


Получается, что я перед вызовом "Reinvoke ISP" что-то не вернул в исходное состояние. Вопрос, что?

ЗЫ. Компилятор - IAR 5.4.


--------------------
Все врут (с) /M.D.House/
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dreamer
сообщение Mar 26 2010, 16:27
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 13-01-06
Из: Санкт-Петербург
Пользователь №: 13 154



Цитата
Вы скорее всего не дочитали инструкцию

Так оно понятно, что все беды от этого. Вопрос только, где именно wink.gif

Цитата
следовательно при прошивке утилитой, после синхронизации Вы должны указать частоту на которой работает контроллер.

Пытаюсь указать эту частоту. Действую четко по юзер-мануалу:

Цитата
If the signature is not valid, the auto-baud routine synchronizes with the host via serial port
0. The host should send a ’?’ (0x3F) as a synchronization character and wait for a
response. The host side serial port settings should be 8 data bits, 1 stop bit and no parity.
The auto-baud routine measures the bit time of the received synchronization character in
terms of its own frequency and programs the baud rate generator of the serial port. It also
sends an ASCII string ("Synchronized<CR><LF>") to the Host. In response to this host
should send the same string ("Synchronized<CR><LF>"). The auto-baud routine looks at
the received characters to verify synchronization. If synchronization is verified then
"OK<CR><LF>" string is sent to the host. Host should respond by sending the crystal
frequency (in kHz) at which the part is running. For example, if the part is running at 10
MHz , the response from the host should be "10000<CR><LF>". "OK<CR><LF>" string is
sent to the host after receiving the crystal frequency. If synchronization is not verified then
the auto-baud routine waits again for a synchronization character


Все проходит именно до момента ввода частоты после получения "OK<CR><LF>" от процессора.
Ввожу "<чило><CR><LF>" - получаю ответ "1<CR><LF>", что соответствует "Invalid Command".
Причем, это происходит и в случае Invoke из программы, и в случае самомтоятельного исполнения загрузчика после передергивания питания.
Получается, частота задается каким-то другим образом, но каким - не нашел. Или не там искал.

Цитата
PLL по этой команде НЕ отключается

Я пробовал отключить его программно до вызова InvokeISP. Не помогло.

Кстати, есть ли какая-то альтернатива ФлешМеджику, в которой виден будет протокол обмена? Хочется увидеть, на каком этапе происходит сбой, а кроме того, каким образом он все-таки задает эту самую пресловутую частоту. Конечно, имеется осциллограф, но хочется менее мучительных решений.

А вообще спасибо за участие.

Сообщение отредактировал Dreamer - Mar 26 2010, 16:36


--------------------
Все врут (с) /M.D.House/
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 26 2010, 16:33
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dreamer @ Mar 26 2010, 19:27) *
Я пробовал отключить его программно. Не помогло.

Да не надо его отключать - великолепно работает на любой частоте. Сделаете все без лишних фантазий с указанием правильной частоты и заработает. Проверено.
Цитата
Кстати, есть ли какая-то альтернатива ФлешМеджику, в которой виден будет протокол опроса?

smile.gif smile.gif smile.gif да http://electronix.ru/forum/index.php?showt...mp;#entry714994
Цитата
а кроме того, каким образом он все-таки задает эту самую пресловутую частоту.

Как описано в User Manual, так в точности и задает.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dreamer   Reinvoke ISP, LPC2388   Mar 26 2010, 10:12
- - Dreamer   Что-то чем дальше, тем менее понятно. Итак, в обеи...   Mar 26 2010, 14:09
- - zltigo   Цитата(Dreamer @ Mar 26 2010, 13:12) Полу...   Mar 26 2010, 14:52
- - Dreamer   Хорошая программа, спасибо. Как задается частота, ...   Mar 28 2010, 20:30
|- - zltigo   Цитата(Dreamer @ Mar 28 2010, 23:30) В на...   Mar 28 2010, 21:07
- - Dreamer   ЦитатаВы говорите, что при программировании после ...   Mar 29 2010, 14:02
|- - zltigo   Цитата(Dreamer @ Mar 29 2010, 17:02) а их...   Mar 29 2010, 14:22
- - Dreamer   Цитата"FCCO Check: 288.00000" там в erra...   Mar 29 2010, 14:48
- - Dreamer   ЦитатаА с MAM у Вас что? Включен: Код MAMCR = 0;...   Mar 29 2010, 16:04
- - zltigo   Не знаю. Думайте. Вот, для проверки только-что на ...   Mar 29 2010, 16:37
- - Dreamer   Пока хороших мыслей в голову не приходит. Приходят...   Mar 30 2010, 09:30
|- - zltigo   Цитата(Dreamer @ Mar 30 2010, 12:30) Что ...   Mar 30 2010, 10:34
- - Dreamer   Переделал почти как вы сказали (почти - потому что...   Mar 30 2010, 14:36
|- - zltigo   Цитата(Dreamer @ Mar 30 2010, 17:36) пото...   Mar 30 2010, 14:44
- - Dreamer   Цитатану в чем-то другом проблема, ибо работает re...   Mar 30 2010, 15:25
|- - zltigo   Цитата(Dreamer @ Mar 30 2010, 18:25) по с...   Mar 30 2010, 15:38
- - Dreamer   ЦитатаВсе взаимодействие четко описано в документа...   Mar 31 2010, 06:50
- - zltigo   Цитата(Dreamer @ Mar 31 2010, 09:50) Но в...   Mar 31 2010, 09:56


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:42
Рейтинг@Mail.ru


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