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

 
 
> 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 28 2010, 20:30
Сообщение #2


Участник
*

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



Хорошая программа, спасибо. Как задается частота, разобрался.

Но чем больше читаю документацию, тем больше путаницы.
Размышляю вот над этой фразой:
Цитата
The command does not disable
the PLL hence it is possible to invoke the bootloader when the part is running off
the PLL. In such case the ISP utility should pass the CCLK (crystal or PLL output
depending on the clock source selection Section 4–5.1) frequency after autobaud
handshake.


В настройках PLL Fcclk у меня 72 мегагерца.
Получается, что когда я пытаюсь программироваться через Invoke ISP и при этом PLL не отключаю, нужно задавать частоту осциллятора 72 мегагрца?
Задаю, запускаю программу, не прошивается, получаю вот такой результат:

Цитата
AT200/AES ISP/Terminal for LPC2000 V0.31.1 by I.Zalts
HEX file: [Ctrl+F9] rtosdemo.hex
Turn on debug level: 04
Serial Port: COM6 Baud: 9600
Oscilator: 72000KHz
COM6 opened...
Entering to LPC2000 Bootloader
DTR(1) RTS(1)
DTR(0) RTS(1)
DTR(0) RTS(0)
S(l= 1)'?'
A(l=14)'Synchronized(0D) (0A) '
-Ok
S(l=14)'Synchronized(0D) (0A) '
A(l=18)'Synchronized(0D) (0A) OK(0D) (0A) '
Synchronized 1
Setting oscillator
S(l= 7)'72000(0D) (0A) '
A(l=11)'72000(0D) (0A) OK(0D) (0A) '
Unlock
S(l= 9)'U 23130(0D) (0A) '
A(l=12)'U 23130(0D) (0A) 0(0D) (0A) '
Bootcode: S(l= 3)'K(0D) (0A) '
A(l=12)'K(0D) (0A) 0(0D) (0A) 3(0D) (0A) 3(0D) (0A) '
3.3.0
Chip ID: S(l= 3)'J(0D) (0A) '
A(l=17)'J(0D) (0A) 0(0D) (0A) 402718517(0D) (0A) '
LPC2388 512KB ROM/64KB SRAM (ID:402718517/0x1800FF35)
File : 'rtosdemo.hex' -Loaded
Converting file 'rtosdemo.hex' to binary format...
Load Address: 00000000
Linear Address: 00010000
Linear Address: 00020000
Linear Address: 00030000
Run Address Found: 0002D318
End of File
Image size: 198548. Data Aligned to 4096 Bytes (198548->200704)
Sector 00S(l= 7)'P 0 0(0D) (0A) '
A(l=10)'P 0 0(0D) (0A) 0(0D) (0A) '
S(l= 7)'E 0 0(0D) (0A) '
A(l=10)'E 0 0(0D) (0A) 0(0D) (0A) '
S(l=19)'W 1073742336 4140(0D) (0A) '
A(l=22)'W 1073742336 4140(0D) (0A) 0(0D) (0A) '
S(l=63)'M&/"?Y1CPG^5&L`#J&/"?Y1CPG^4BKK^T(/$?Y1CPG^48TP(`!`````@````,(0D) (0A) '
A(l=63)'M&/"?Y1CPG^5&L`#J&/"?Y1CPG^4BKK^T(/$?Y1CPG^48TP(`!`````@````,(0D) (0A) '
Line: 1
S(l=63)'M````$````/__________'```````````````````````````````````````(0D) (0A) '
A(l=63)'M````$````/__________'```````````````````````````````````````(0D) (0A) '
Line: 2

< bla-bla-bla...>

Line: 15
S(l=63)'M`"$`(0`A`"$`/P`````````````````_`"$`(0`A`"$`(0`A`"$`(0`_````(0D) (0A) '

Error on Echo Data(1)
M`"$`(0`A`"$`/P`````````````````_`"$`(0`A`"$`(0`A`"$`(0`_````

<bla-bla-bla...>

Line: 19
S(l=63)'M````/P`A`"$`(0`A`"$`(0`A`"$`/P`````````````````_`"$`(0`A`"$`(0D) (0A) '

Error on Echo Data(1)
M````/P`A`"$`(0`A`"$`(0`A`"$`/P`````````````````_`"$`(0`A`"$`

Line: 20
S(l= 7)'17142(0D) (0A) '

Error on writing CRC(1)


Получается, что-то я еще не учел... Не могу понять, что?
Разумеется, при передергивании питания и повторном запуске все прошивается, так как там не требуется задавать частоту.
Еще закралось подозрение, что я неправильно посчитал константы для PLL, но уже сколько раз перепроверил, замыленным глазом ошибок не нашел.
Кварц у меня стоит 12 мегагерц.

Константы для PLL вот такие:

PLL_M 11
PLL_N 0
CCLK_DIV 3

Сообщение отредактировал Dreamer - Mar 28 2010, 20:41


--------------------
Все врут (с) /M.D.House/
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 26 2010, 16:27
|- - zltigo   Цитата(Dreamer @ Mar 26 2010, 19:27) Я пр...   Mar 26 2010, 16:33
|- - 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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