Jump to content

    

Как программить flash в LPC без IAP ?

Разница ощущается?

Нет.

Никакого принципиального достоинства в ограничении свободы не вижу. У Вас либо есть свобода отключить все совсем, либо есть возможность оставить эквивалент той самой "Erase" ввиде полностью урезанного штатного загрузчика. Хотите еще и свой "Erase"? Берете любую удобную для себя ножку и назначаете ее в своем загрузчике/приложении "Erase". У меня это, например, один из пинов на JTAG.

Share this post


Link to post
Share on other sites

Интересно, а как на этапе производства этот-самый bootloader попадает во-флеш?

Share this post


Link to post
Share on other sites
Интересно, а как на этапе производства этот-самый bootloader попадает во-флеш?

А наверное через JTAG.

Share this post


Link to post
Share on other sites
А наверное через JTAG.

Сомневаюсь, эти чипы без bootloader-а пользователю прошить нельзя (через JTAG вызываются функции IAP, сам JTAG ничего о порядке работы с FLASH незнает)

Share this post


Link to post
Share on other sites
Сомневаюсь, эти чипы без bootloader-а пользователю прошить нельзя (через JTAG вызываются функции IAP, сам JTAG ничего о порядке работы с FLASH незнает)

А кто мешает залить в RAM функции которые "шьют" флеш без IAP? У производителя такие явно должны быть, это ведь только клиенты не удостоены чести знать алгоритмы.

Основной вопрос в том, разлочится ли JTAG если в "секретный" регистр не будет прописано нужное значение CRPx - при пустом флеше такого явно не происходит - некому прописать. Изначально сразу после аппаратного сброса JTAG залочен и, возможно, есть какой-то счетчик, который спустя некоторое время должен JTAG разлочить, если "секретный" регистр не прописан.

Share this post


Link to post
Share on other sites
А кто мешает залить в RAM функции которые "шьют" флеш без IAP? У производителя такие явно должны быть, это ведь только клиенты не удостоены чести знать алгоритмы.

Согласен полностью.

Основной вопрос в том, разлочится ли JTAG если в "секретный" регистр не будет прописано нужное значение CRPx - при пустом флеше такого явно не происходит - некому прописать. Изначально сразу после аппаратного сброса JTAG залочен и, возможно, есть какой-то счетчик, который спустя некоторое время должен JTAG разлочить, если "секретный" регистр не прописан.

После подачи питания JTAG не залочен - TAP контроллер захватывает работу ядра, время ему на это надо, вот и создаётся впечатление что JTAG залочен. А CRP - наоборот запрещает работу JTAG если записаны "магические слова" по фикс. адресу во флеш (расположенные рядом с загрузчиком - не путать с 0х1FC)

Share this post


Link to post
Share on other sites
После подачи питания JTAG не залочен - TAP контроллер захватывает работу ядра, время ему на это надо,

Что значит "захватывает работу ядра"? :07:

TAP - отдельно, ядро - отдельно. Через TAP можно рулить ICE, а уже ICE в некотором роде рулит ядром.

Просто пока успеешь проинициализировать TAP+ICE и выставить Debug Request в DCSR - JTAG уже отваливается - ядро работает и пишет "Magic Number". Действительно, может сам JTAG и не залочен :), но сделать ничего полезного до включения блокировки ядром не получается.

Были мысли притормозить ядро, но LPC23 стартует на внутреннем генераторе - тактовую не остановишь, игры с RESET-ом тоже ни к чему полезному не привели - ICE при сбросе блокируется.

вот и создаётся впечатление что JTAG залочен. А CRP - наоборот запрещает работу JTAG если записаны "магические слова" по фикс. адресу во флеш (расположенные рядом с загрузчиком - не путать с 0х1FC)

"Магические слова" проверяются по адресу 0x1FC кодом в загрузчике почти сразу при старте. Если слово в 0x1FC "магическое", то загрузчик блокирует JTAG прописывая 0x87654321 в "секретный" регистрик @0xE01FC184 - Вы это подразумевали?

Share this post


Link to post
Share on other sites

Уважаемые эксперты, позвольте вмешаться с вопросиком. Собственно вопрос: Возможно программно ввести LPC2378 в режим программирования ISP? Чтобы в терминалке знак вопроса, Synchronized и прочее. Пробовал коверкать данные по адресу 14, виснет на раз, но в режим программирования не становиться. :)

Share this post


Link to post
Share on other sites
Что значит "захватывает работу ядра"? :07:

TAP - отдельно, ядро - отдельно.

Вот потому по подаче питания ядро может выполнить несколько инмтрукций до захвата его работы TAP-контроллером, а что эти инструкции собой представляют - скажет bootloader (как-раз может отрубаться JTAG, активность которо определяется состоянием отдельного пина при старте).

"Магические слова" проверяются по адресу 0x1FC кодом в загрузчике почти сразу при старте. Если слово в 0x1FC "магическое", то загрузчик блокирует JTAG прописывая 0x87654321 в "секретный" регистрик @0xE01FC184 - Вы это подразумевали?

не, где-то инфа пробегала о возможности защиты от считывания/записи отдельных секторов стандартными ф-ми bootloader-а

Share this post


Link to post
Share on other sites
Уважаемые эксперты, позвольте вмешаться с вопросиком. Собственно вопрос: Возможно программно ввести LPC2378 в режим программирования ISP? Чтобы в терминалке знак вопроса, Synchronized и

Команда IAP "reinvoke ISP" чем-то не устраивает?

Share this post


Link to post
Share on other sites
Возможно программно ввести....

Да,

- привести контроллер в максимально исходное состояние (контроллер прерывний, PLL, ....);

- запрограммировать пин по которому при старте загрузчик сваливается в консоль на выход, записать туда 0;

- перейти по вектору сброса;

- прочитав на желаемом пине 0 загрузчик свалится в консоль.

Share this post


Link to post
Share on other sites
Да,

- привести контроллер в максимально исходное состояние (контроллер прерывний, PLL, ....);

Примерно так:

PLLCON &= ~(1 << 1); // Disconnect the PLL

PLLCON &= ~(1 << 0); /* Disable the PLL */

VICIntEnClear |=0xFFFFFFFF;

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

- перейти по вектору сброса;

А вот здесь не знаю что делать. Ассемлерную вставку по идее надо типа "переход по адресу" Комада вроде "В". Или не прав? Как записать грамотно? Может ещё в чём-то не прав?

Share this post


Link to post
Share on other sites
Основной вопрос в том, разлочится ли JTAG если в "секретный" регистр не будет прописано нужное значение CRPx - при пустом флеше такого явно не происходит - некому прописать.

 

"Магические слова" проверяются по адресу 0x1FC кодом в загрузчике почти сразу при старте. Если слово в 0x1FC "магическое", то загрузчик блокирует JTAG прописывая 0x87654321 в "секретный" регистрик @0xE01FC184 - Вы это подразумевали?

Ну вот Вы сами ответили на вопрос.

Нет загрузчика, никто и не прописывает никакие кодовые слова - значит JTAG в голом чипе доступен всегда.

Share this post


Link to post
Share on other sites
Ассемлерную вставку по идее надо типа "переход по адресу" Комада вроде "В". Или не прав?

Чуть что, так сразу ASM :).

name - это собственно адрес чего-либо;

name() - это вызов по адресу....

теперь вместо name берем константу 0, говорим, что это указатель на функцию без параметров и вызываем:

((void(*)(void))0)();

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this