|
|
  |
Несколько вопросов по lpc176x |
|
|
|
Jun 4 2010, 16:22
|

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

|
Цитата(vallav @ Jun 4 2010, 07:13)  А загрузка происходит так - бутлоадер... Если речь идет не о неком неведомом бутлоадере, а о штатном загрузчике LPC, то все происходит не так, ибо начинается с того, что имеется аппаратная поддержка ремапа 256 байт векторов бутового загрузчика. Как работают вторичные загрузчики типа рекламируемого USB, лучше разбирать по исходным текстам, даже если они "бангалорские".
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 5 2010, 05:40
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(zltigo @ Jun 4 2010, 20:22)  Если речь идет не о неком неведомом бутлоадере, а о штатном загрузчике LPC, то все происходит не так, ибо начинается с того, что имеется аппаратная поддержка ремапа 256 байт векторов бутового загрузчика. Как работают вторичные загрузчики типа рекламируемого USB, лучше разбирать по исходным текстам, даже если они "бангалорские". В штатном конечно не так. Штатный честно запускает пользовательскую прогу передавая управление по значению второго слова в флеше. И, если стартап слинкован в ОЗУ ( против чего линкер Кейла не возражает ) прога естественно вешается. Так как идет обращение к коду в ОЗУ, который появится только после того, как будет выполнен тот кусочек кода в ОЗУ, куда идет обращение. Кривой бангалорский загрузчик эту проблему успешно разрешает, запуская программу по адресу начала таблицы прерываний. ( вопрос только в том, это случайность или сознательный ход ). По частоте тактового генератора USB пока ответов нет, придется похоже самому проверять. Но это будет не скоро. Ну ладно, ответ на вопрос о тактовой частоте USB может быть малоизвестен, но почему нет ответов на вопрос о времени записи/чтения файла в флешь контроллера через JTAG? Ни у кого нет такого заливщика? Или цыфры стыдно обнародовать? Еще вопрос. Озаботился я тут дизассемблером кода Thumb-2. Поиск привел: 1. К заявлению "крутых перцев" - мол код там очень простой и дизассемблер пишеься за пару часов. 2. К двум дизассемблерам ( ~1 Мбайт ), которые по описанию очень крутые но у меня работать с ними не получилось, не нашел, как в них свой бинарник загрузить. 3. К супердизассемблеру ( ~30 Мбайт ) который после скачивания радосно сообщил, что работает только с электронным ключем. 4. Ну и небезизвестная IDA, плагин которой под именем HexRays умеет работать с Thumb-2 начиная с версий, датированных июнем 2010 года, то есть выпущенных вчера. И стоит этот плагин всего навсего 1600 евро. Вот такая вот веселая история. Остается дизассемблер от Кейла, с которым пока не разобрался, как в него свой бинарник загрузить и заставить симулятор шагать по этому бинарнику. Порка получается только - в стартапе забить нужный код в область с абсолютным адресом ( в моем случае - 0x2000 ). Забил 4 слова, посмотрел, работает. Но забивать таким образом 500 слов как то не вдохновляет.
Сообщение отредактировал vallav - Jun 5 2010, 05:50
|
|
|
|
|
Jun 5 2010, 07:14
|

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

|
Цитата(vallav @ Jun 3 2010, 16:42)  У меня получилось - читается около секунды, пишется около 5 секунд. Сильно сомневаюсь, что в LPC1000 зачем-то сильно ускорили запись во Flash и скрыли сей факт, но для LPC2000 времена записи во Flash нормировались и в режиме посектороного, т.е. неполного стирания только записть во Flash дожна занимать ~20*400ms + 400000/256*1ms что уже много больше намерянных "5 секунд". Сначала научитесь корректно делать оценки, а потом уже спрашивайте как там с JTAG, который, кстати, тоже работает очень на разных, в том числе и мегабитных скоростях. Цитата(vallav @ Jun 5 2010, 08:40)  По частоте тактового генератора USB пока ответов нет, придется похоже самому проверять. Хотите маяться дурью вместо соблюдений рассчетных требований спецификаций - майтесь.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 5 2010, 08:21
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(zltigo @ Jun 5 2010, 11:14)  Сильно сомневаюсь, что в LPC1000 зачем-то сильно ускорили запись во Flash и скрыли сей факт, но для LPC2000 времена записи во Flash нормировались и в режиме посектороного, т.е. неполного стирания только записть во Flash дожна занимать ~20*400ms + 400000/256*1ms что уже много больше намерянных "5 секунд". Сначала научитесь корректно делать оценки, а потом уже спрашивайте как там с JTAG, который, кстати, тоже работает очень на разных, в том числе и мегабитных скоростях. Дык просто все было. В тотал-коммандере - стер исходный файл с USB-диска. Нашел файл размером в 400 килобайт, выбрал копи на USB-диск, нажал - поехали - и засек, сколько времени ехали. Получилось - 5 секунд. Вы забыли привести цифры - сколько времени пишется и сколько стирается по JTAG. Или просто не знаете? А тогда вся эта Ваша философия "крутого перца с горячими ушами" - зачем? Я знаю, что Вы - крутой перец, и что уши у Вас не холодные... Цитата(zltigo @ Jun 5 2010, 11:14)  Хотите маяться дурью вместо соблюдений рассчетных требований спецификаций - майтесь. Так я же пояснил = зачем. Если USB спокойно пашет при отклонении тактовой на +-10%, то в приборах, которые для себя - использовать IRC. В приборах, которые для Вас - естественно все строго по спецификации...
|
|
|
|
|
Jun 5 2010, 08:59
|

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

|
Цитата(vallav @ Jun 5 2010, 11:21)  Вы забыли привести цифры - сколько времени пишется и сколько стирается по JTAG. Или просто не знаете? Нет, просто опять не дооценил степень Вашей некометентности  . Для тех, кто не способен к самостоятельному восприятию и анализу информации, сообщаю, что любой LPC загрузчик, в том числе и JTAG, использует открытый IAP интерфес штатного загрузчика для работы с Flash и в части записи-стирания все равны. Отличия имеют место быть в тактовой частоте контроллера, качестве самого загрузчика и размерах блоков которыми он оперирует, ну и только один из факторов, который при многомегабитных (12..25Mbit частоты интерфейсов JTAG/SWD у Cortex-ов ) скоростях передачи уже далеко не самый определяющий, это скорость интерфейса передачи этой самой информации загрузчику. При 12Mhz тактовой данные по JTAG загружаются со скоростью 720Kbytes/s Цитата(vallav @ Jun 5 2010, 11:21)  В тотал-коммандере... Вот я и говорю - учитесь сначала корректно делать оценки.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 5 2010, 11:29
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(zltigo @ Jun 5 2010, 12:59)  При 12Mhz тактовой данные по JTAG загружаются со скоростью 720Kbytes/s
Вот я и говорю - учитесь сначала корректно делать оценки. Да... просто привести - у меня 400 Кбайтный файл заливается в контроллер по JTAG xx секунд, читается из контроллера yy секунд - жаба душит?
Сообщение отредактировал rezident - Jun 6 2010, 21:35
Причина редактирования: Нарушение п.3.4 Правил форума.
|
|
|
|
|
Jun 5 2010, 12:21
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(zltigo @ Jun 5 2010, 16:10)  Нет, просто характер не позволяет давать глупые ответы, даже на глупейше-пустейшие вопросы. Ну а нормальные развернутые ответы, Вы воспринимать хронически не способны. В общем мне так "общаться" окончательно надоело. Ответов больше не будет. Понятно. Значит Вы - fabless, железа у Вас нет а все - только теоретически... Бывает... Неужели эту ветку не читает кто либо, у кого есть lpc1768 подключенная к JTAG_у?
|
|
|
|
|
Jun 5 2010, 15:55
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(vallav @ Jun 5 2010, 18:21)  Неужели эту ветку не читает кто либо, у кого есть lpc1768 подключенная к JTAG_у? Ну у меня есть. На работе лежит starterkit-овская плата SK-MLPC1768 и MT-Link. Только после перечитывания ветки особого желания делать что-либо специально для вас я не испытываю. Вдруг полученные циферки не подойдут к вашим убеждениям и я же еще и виноват останусь  ИМХО документации от производителя нужно можно чаще всего верить. А если вы не умеете ее читать и понимать, то нужно учится этому. "Терпение и труд все перетрут"
|
|
|
|
|
Jun 5 2010, 23:17
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 22-03-10
Пользователь №: 56 131

|
Цитата(vallav @ Jun 5 2010, 06:40)  4. Ну и небезизвестная IDA, плагин которой под именем HexRays умеет работать с Thumb-2 начиная с версий, датированных июнем 2010 года, то есть выпущенных вчера. И стоит этот плагин всего навсего 1600 евро. Плагин нужен только для декомпиляции кода в C. Для простого дизассемблирования достаточно самой иды.
|
|
|
|
|
Jun 6 2010, 05:45
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(rezident @ Jun 5 2010, 19:55)  Ну у меня есть. На работе лежит starterkit-овская плата SK-MLPC1768 и MT-Link. Только после перечитывания ветки особого желания делать что-либо специально для вас я не испытываю. Вдруг полученные циферки не подойдут к вашим убеждениям и я же еще и виноват останусь  ИМХО документации от производителя нужно можно чаще всего верить. А если вы не умеете ее читать и понимать, то нужно учится этому. "Терпение и труд все перетрут"  То есть, если по описанию одно а в натуре другое, то сомневаться в правильности описания - не стоит? Вот пробовал в симуляторе Кейла - по ресет CPU он ставит sp - значение первого слова из флеша, ip - значение второго слова из флеша. Меняю значение sp на большее. Запускаю, в main приходит с sp, близким к значению из флеша. Так где на самом деле инициализируется стек? Аппаратно при сбросе? Или все же кодом инициализации? Я исходно верю описанию. Но когда в железе получается по другому, я начинаю верить железу. Или вот эта ахинея с проверкой наличия пользовательской программы. Генератор пользовательских программ - Кейл - на эту проверку откровенно забил. А вот изготовители заливщиков этим озаботились и тупо меняют 8 слово флеша независимо от того, что во флеш заливается. Я вначале в это просто не поверил, думал - разигрывают... Получается, если я заливаю работающую прогу от Кейла но не правильным заливщиком - она проверку не пройдет и не запустится. Если я заливаю любую хню, но правильным заливщиком, она проверку пройдет и запустится. А если я в Кейле слинковал прогу так, что у меня в флеше всего 4 вектора в таблице ( что необходимо для запуска ) а вся таблица слинкована в ОЗУ, заливщик прогу испортит ( так как в 8 слове флеша - код загрузки ) и прога запустится и повесится. Полагаете это - нормально? Или с тактовой USB. Почему то UART, у которого установки фазы клока по синхроимпульсу ( старту ) должно хватать на 10 тактов - от IRC работает, точности хватает. А USB, у которой синхроимпульсы максимум через 5 тактов и есть преамбула для настройки тактового генератора ( а не просто установка фазы клока ) точности IRC не хватает... Все равно - должен верить описанию - USB с IRC - низзя. Кстати, FTDI - можно а вот мне все равно - низзя... С цифрами по скорости заливки/чтения флеши через JTAG. Я на самом деле не знаю, какие они. Я знаю только, что заливать 32 Килобайта настолько долго, что выгоднее перегнать прогу в ОЗУ и ставить точки остановки там, чем ставить их перезаливкой проги в флешь. Или это делается из экономии - чтобы не использовать ненароком отведенный лимит в 100 000 заливок... Если стыдно их приводить - то зачем эта вся философия по поводу температуры моих ушей? Цитата(igorsk @ Jun 6 2010, 03:17)  Плагин нужен только для декомпиляции кода в C. Для простого дизассемблирования достаточно самой иды. Как то не хочется ставить 100 мегабайтную прогу только для того, чтобы она делала простое дизассемблирование кода. Да и встречал в инете, что IDA старых версий не все Thumb-2 кода берет. Но когда дизассемблер Кейла меня достанет, придется ставить IDA. Кстати, можно ли сделать так, чтобы при запуске симулятора он не пытался добраться до main а останавливался на первом шаге. Если он до main не добрался а вылетел по дороге ( ну проги у меня такие ) то он как то странно работает. Ресетишь CPU, ставищь IP на начало кода инициализации - код выполняется а IP остается неизменным. Пришлось ставить по дороге ловушку, покрутившись в которой симулятор выподает в меню. И вот тогда по коду ходит. И с загрузкой своего бинарника в дизассемблер. Неужели низзя?
|
|
|
|
|
Jun 6 2010, 08:33
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(vallav @ Jun 6 2010, 09:45)  Я знаю только, что заливать 32 Килобайта настолько долго, что выгоднее перегнать прогу в ОЗУ и ставить точки остановки там, чем ставить их перезаливкой проги в флешь. 32 килобайта заливаются за несколько секунд. Откуда бредни про "настолько долго"? Цитата Кстати, можно ли сделать так, чтобы при запуске симулятора он не пытался добраться до main а останавливался на первом шаге. Загляните наконец в настройки проекта "Options for target..." и на вкладке Debug на стороне симулятора (левая половина) уберите галку с "Run to Main()".
|
|
|
|
|
Jun 6 2010, 09:14
|

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

|
Контрольные вопросы для Принца Флоризеля, который, как известно, знал все заранее и любое решение находил несколько ранее собеседников: 1. Сколько указателей стека у LPC176x (Cortex-M3)? 2. Какой из них инициализируется аппаратно? 3. Есть-ли какие либо ограничения на софтовую инициализацию указателей стека? 4. Какие действия выполняются в startup до запуска main()? 5. Функция __main() в default startup KEIL это то-же самое, что и main()? 6. Сколько записей в таблице векторов Cortex-M3 жестко отведено под нужды ядра? 7. Какие утилиты входят в классический набор утилит binutils, каковы их аналоги в пакете от KEIL? 8. Что умеет делать утилита fromelf из комплекта поставки KEIL?
Ну и вообще начинающим будет на мой взгляд небесполезно ответить для себы на вопросы в контексте последних постов. Флоризель, само собой, все и так знает, ну а с другими форумчанами можно продолжить, если потребуются уточнения.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 6 2010, 12:12
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(sonycman @ Jun 6 2010, 12:33)  32 килобайта заливаются за несколько секунд. Откуда бредни про "настолько долго"? Дык я же объяснил. Существует такая правктика - для отладки кусок проги переносить в ОЗУ. Чтобы отладка шла быстрее. Вроде ограничение в скорости там одно - время перезаливки проги с новыми точками останова. Или причина переноса отладки в ОЗУ - другая? И почему сразу - бредни? Может лучше использовать - заблуждения? Цитата(sonycman @ Jun 6 2010, 12:33)  Загляните наконец в настройки проекта "Options for target..." и на вкладке Debug на стороне симулятора (левая половина) уберите галку с "Run to Main()". Спасибо. А как по поводу заливки своего бинарника и внесение исправления в дизассемблируемый код? inline asstmbly у меня все время серая. И как отключить перескок полоски скроллинга на панели дизассемблера - больно хлопотно ставить адресс конкретный адресс когда шаг установки в 300 байт. Контрольные вопросы для Принца Флоризеля, который, как известно, знал все заранее и любое решение находил несколько ранее собеседников: 1. Сколько указателей стека у LPC176x (Cortex-M3)? Два. 2. Какой из них инициализируется аппаратно? Ни какой. Но один из них инициализируется в коде инициализации. Щас гляну, как он называется - во - MSP. 3. Есть-ли какие либо ограничения на софтовую инициализацию указателей стека? Ага. Его нелзя ставить на начало ОЗУ. И туда, где нет ОЗУ. И выравнивать надо. 4. Какие действия выполняются в startup до запуска main()? Ой, много. Толко вот попасть на код инициализации не всегда получается. Вы про линкер уже прочли? Умеете модули линковать в ОЗУ? 5. Функция __main() в default startup KEIL это то-же самое, что и main()? Не а. Это и есть начало кода инициализации. В стартапе на нее только ссылка. Сама она от линкера. 6. Сколько записей в таблице векторов Cortex-M3 жестко отведено под нужды ядра? Четыре первых. Реально используется два первых при запуске проги. 7. Какие утилиты входят в классический набор утилит binutils, каковы их аналоги в пакете от KEIL? Без понятия. 8. Что умеет делать утилита fromelf из комплекта поставки KEIL? Бинарник для заливки посторонними заливщиками. Ну и вообще начинающим будет на мой взгляд небесполезно ответить для себы на вопросы в контексте последних постов. Флоризель, само собой, все и так знает, ну а с другими форумчанами можно продолжить, если потребуются уточнения. Надеюсь Вас не затруднит дать на свои вопросы правильные ответы? Или как всегда - характер не позволяет давать глупые ответы, даже на глупейше-пустейшие вопросы...
Сообщение отредактировал rezident - Jun 6 2010, 21:33
Причина редактирования: Удалено дублировние текста.
|
|
|
|
|
Jun 6 2010, 12:26
|

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

|
Ответы на все вопросы, кроме первого и частично третьего, данные vallav не верные, если не считать "Ой много" и "Без понятия", которые вообще не ответы. Особенно заслуживает внимания шедевр "Сама она от линкера"  . Примерно так-же объясняли множество вещей первобытные люди - "она от бога", и точка. Остальное соответственно домысливали, как умели, измышляя легенды и мифы. Продолжаем опрос: 1. Сколько в ядре Corteх-M3 поддерживается Breakpoint и Watchpoint. 2. Что такое за Flash Patch механизм? 3. Зачем при наличии 1 и 2 пунктов нужна "перезаливка проги с новыми точками останова"
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|