|
|
  |
Как программить flash в LPC без IAP ? |
|
|
|
Oct 13 2008, 09:33
|

Частый гость
 
Группа: Свой
Сообщений: 101
Регистрация: 9-01-06
Пользователь №: 12 967

|
Цитата(bus16 @ Oct 13 2008, 12:36)  Интересно, а как на этапе производства этот-самый bootloader попадает во-флеш? А наверное через JTAG.
|
|
|
|
|
Oct 13 2008, 09:50
|
Частый гость
 
Группа: Свой
Сообщений: 78
Регистрация: 10-01-07
Пользователь №: 24 270

|
Цитата(Abo @ Oct 13 2008, 13:33)  А наверное через JTAG. Сомневаюсь, эти чипы без bootloader-а пользователю прошить нельзя (через JTAG вызываются функции IAP, сам JTAG ничего о порядке работы с FLASH незнает)
|
|
|
|
|
Oct 13 2008, 10:11
|

embarrassed systems engineer
    
Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038

|
Цитата(bus16 @ Oct 13 2008, 12:50)  Сомневаюсь, эти чипы без bootloader-а пользователю прошить нельзя (через JTAG вызываются функции IAP, сам JTAG ничего о порядке работы с FLASH незнает) А кто мешает залить в RAM функции которые "шьют" флеш без IAP? У производителя такие явно должны быть, это ведь только клиенты не удостоены чести знать алгоритмы. Основной вопрос в том, разлочится ли JTAG если в "секретный" регистр не будет прописано нужное значение CRPx - при пустом флеше такого явно не происходит - некому прописать. Изначально сразу после аппаратного сброса JTAG залочен и, возможно, есть какой-то счетчик, который спустя некоторое время должен JTAG разлочить, если "секретный" регистр не прописан.
|
|
|
|
|
Oct 13 2008, 10:29
|
Частый гость
 
Группа: Свой
Сообщений: 78
Регистрация: 10-01-07
Пользователь №: 24 270

|
Цитата(VslavX @ Oct 13 2008, 14:11)  А кто мешает залить в RAM функции которые "шьют" флеш без IAP? У производителя такие явно должны быть, это ведь только клиенты не удостоены чести знать алгоритмы. Согласен полностью. Цитата Основной вопрос в том, разлочится ли JTAG если в "секретный" регистр не будет прописано нужное значение CRPx - при пустом флеше такого явно не происходит - некому прописать. Изначально сразу после аппаратного сброса JTAG залочен и, возможно, есть какой-то счетчик, который спустя некоторое время должен JTAG разлочить, если "секретный" регистр не прописан. После подачи питания JTAG не залочен - TAP контроллер захватывает работу ядра, время ему на это надо, вот и создаётся впечатление что JTAG залочен. А CRP - наоборот запрещает работу JTAG если записаны "магические слова" по фикс. адресу во флеш (расположенные рядом с загрузчиком - не путать с 0х1FC)
|
|
|
|
|
Oct 13 2008, 16:35
|

embarrassed systems engineer
    
Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038

|
Цитата(bus16 @ Oct 13 2008, 13:29)  После подачи питания JTAG не залочен - TAP контроллер захватывает работу ядра, время ему на это надо, Что значит "захватывает работу ядра"? TAP - отдельно, ядро - отдельно. Через TAP можно рулить ICE, а уже ICE в некотором роде рулит ядром. Просто пока успеешь проинициализировать TAP+ICE и выставить Debug Request в DCSR - JTAG уже отваливается - ядро работает и пишет "Magic Number". Действительно, может сам JTAG и не залочен  , но сделать ничего полезного до включения блокировки ядром не получается. Были мысли притормозить ядро, но LPC23 стартует на внутреннем генераторе - тактовую не остановишь, игры с RESET-ом тоже ни к чему полезному не привели - ICE при сбросе блокируется. Цитата(bus16 @ Oct 13 2008, 13:29)  вот и создаётся впечатление что JTAG залочен. А CRP - наоборот запрещает работу JTAG если записаны "магические слова" по фикс. адресу во флеш (расположенные рядом с загрузчиком - не путать с 0х1FC) "Магические слова" проверяются по адресу 0x1FC кодом в загрузчике почти сразу при старте. Если слово в 0x1FC "магическое", то загрузчик блокирует JTAG прописывая 0x87654321 в "секретный" регистрик @0xE01FC184 - Вы это подразумевали?
|
|
|
|
|
Oct 14 2008, 05:46
|
Частый гость
 
Группа: Свой
Сообщений: 78
Регистрация: 10-01-07
Пользователь №: 24 270

|
Цитата(VslavX @ Oct 13 2008, 20:35)  Что значит "захватывает работу ядра"? TAP - отдельно, ядро - отдельно. Вот потому по подаче питания ядро может выполнить несколько инмтрукций до захвата его работы TAP-контроллером, а что эти инструкции собой представляют - скажет bootloader (как-раз может отрубаться JTAG, активность которо определяется состоянием отдельного пина при старте). Цитата "Магические слова" проверяются по адресу 0x1FC кодом в загрузчике почти сразу при старте. Если слово в 0x1FC "магическое", то загрузчик блокирует JTAG прописывая 0x87654321 в "секретный" регистрик @0xE01FC184 - Вы это подразумевали? не, где-то инфа пробегала о возможности защиты от считывания/записи отдельных секторов стандартными ф-ми bootloader-а
|
|
|
|
|
Oct 14 2008, 07:21
|

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

|
Цитата(TanT @ Oct 14 2008, 07:36)  Возможно программно ввести.... Да, - привести контроллер в максимально исходное состояние (контроллер прерывний, PLL, ....); - запрограммировать пин по которому при старте загрузчик сваливается в консоль на выход, записать туда 0; - перейти по вектору сброса; - прочитав на желаемом пине 0 загрузчик свалится в консоль.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 3 2008, 12:15
|

Участник

Группа: Участник
Сообщений: 61
Регистрация: 22-11-05
Из: Россия->Омск
Пользователь №: 11 210

|
Цитата(zltigo @ Oct 14 2008, 10:21)  Да, - привести контроллер в максимально исходное состояние (контроллер прерывний, PLL, ....); Примерно так: PLLCON &= ~(1 << 1); // Disconnect the PLL PLLCON &= ~(1 << 0); /* Disable the PLL */ VICIntEnClear |=0xFFFFFFFF; Цитата(zltigo @ Oct 14 2008, 10:21)  - запрограммировать пин по которому при старте загрузчик сваливается в консоль на выход, записать туда 0; Что-то вроде: PINSEL4 &= ~(0x03 << 20); /* Clear P2.10 function bits, enabling GPIO function */ FIO40DIR &= ~(1 << 10); /* Configure P2.10 as an input bit */ FIO4PIN &= ~(1<<10); Цитата(zltigo @ Oct 14 2008, 10:21)  - перейти по вектору сброса; А вот здесь не знаю что делать. Ассемлерную вставку по идее надо типа "переход по адресу" Комада вроде "В". Или не прав? Как записать грамотно? Может ещё в чём-то не прав?
--------------------
Если вы не можете объяснить что-то шестилетнему ребенку, значит, вы сами этого не понимаете. Альберт Эйнштейн
|
|
|
|
|
Nov 3 2008, 13:04
|

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

|
Цитата(TanT @ Nov 3 2008, 15:15)  Ассемлерную вставку по идее надо типа "переход по адресу" Комада вроде "В". Или не прав? Чуть что, так сразу ASM  . name - это собственно адрес чего-либо; name() - это вызов по адресу.... теперь вместо name берем константу 0, говорим, что это указатель на функцию без параметров и вызываем: ((void(*)(void))0)();
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 7 2008, 09:10
|

Участник

Группа: Участник
Сообщений: 61
Регистрация: 22-11-05
Из: Россия->Омск
Пользователь №: 11 210

|
Уважаемый, zltigo, переход на нулевой адрес работает отлично... но в режим AUTO-BAUD не становиться. PLL отключил, ноль сформировал на P2.10 (у меня LPC2378). Перезапускается и привет. Пробовал отключать стожевик, уарт (находил примеры для 2100) - бесполезно. CRPх не разрешал. Смотрел по алгоритму в мануале на LPC2378 больше ничего криминального нет. Что не учел?
--------------------
Если вы не можете объяснить что-то шестилетнему ребенку, значит, вы сами этого не понимаете. Альберт Эйнштейн
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|