Skylord Потрошитель прошивок Маститый телефонист Откуда: Россия, Москва С нами с: 05.08.2002 Плодовитость: 355
Рейтинг
Подано 418 (402/16) голосов
|
S40: организация и работа с памятью
|
цитата: TchP пишет:> Бутстраплоадер из С166 к бутанью телефона имеет ну очень отдаленное отношение.
> В камне телефона уже есть РОМ, в который и зашит именно телефонный загрузчик.
Читаю доку на С166: 32K ROM, 1K RAM, 256K Linear Address Space. Почему именно "телефонный загрузчик", если кроме 32К ROM, в которых и должен сидеть BSL, в С166 ничего нету? И зачем вообще он нужен, если встроенный BSL и так позволяет загрузить любой бут, что собственно говоря и делает например тот же Юнисименс? Или ты "телефонным загрузчиком" все-таки называешь BSL?
Читать доки - оно гуд, но надо читать их внимательнее. Сейчас найду где это... Во! Нашел! Ну вот например:
"A built-in bootstrap loader which is implemented in all microcontrollers of the C166-family provides a mechanism to load a startup program via the serial interface. In this case no external (ROM) memory or an internal ROM is required. The bootstrap loader moves code/data into the internal RAM, but it is also possible to transfer data via the serial interface into an external RAM using a second level loader routine. ROM memory (internal or external) is not necessary.
The Bootstrap Loader may be used to load the complete application software into ROMless systems or it may load temporary software into complete systems for testing or calibration."
Это из вступления к одной доке. Ключевые слова - "no external (ROM) memory or an internal ROM is required" и "into
ROMless systems". Если конкретнее - BSL это встроенная фича самого кристалла (кстати, кристалл конкретно телефона это дааалеко не именно С166, особенно последних моделей - там много всего дополнительно засунуто), в ROM'е не лежит и к бутанью телефона никакого отношения не имеет. Телефон же бутается, если можно так выразиться, "телефонным BIOS'ом", который как раз и сидит в ROM'е и еще много чего делает...
Опять же - Юнисименс грузит начальные буты до 256 байт, а последний (главный), которые читается и кладется в память уже не телефоном, а предыдущим бутом - до 64 кб (см. соответствующий байт длины бута перед его посылкой). Это ну никак не соотносится с теми 32 байтами, про которые везде сказано, что они - едины для всего семейства С166.
Далее позволю себе процитировать кусок кода из прошивки S45, который, как мне думается, не особенно отличается в остальных телефонах (т.к. все они всасывают Юнисименсовские буты):
Seg_01:1034E bclr T6R
Seg_01:10350 cmp T6, #0B1h ; '-'
Seg_01:10354 jnb N, loc_10310
Seg_01:10358 mov DPP0, #0
Seg_01:1035C ; assume dpp0: 0 (page 0x0)
Seg_01:1035C nop
Seg_01:1035E mov r1, #2AAh
Seg_01:10362 mov r2, #29Ah
Seg_01:10366
Seg_01:10366 loc_10366: ; CODE XREF: Seg_01:1036Ej
Seg_01:10366 mov r0, T6
Seg_01:1036A add r2, #2
Seg_01:1036C subb rl0, [r1+]
Seg_01:1036E jmpr cc_NC, loc_10366
Seg_01:10370 extr #1
Seg_01:10372 bset word_F130.3
Seg_01:10374 nop
Seg_01:10376 extr #1
Seg_01:10378 bset word_F130.4
Seg_01:1037A nop
Seg_01:1037C mov r0, #16h
Seg_01:10380 mov word_EFDA, r0
Seg_01:10384 nop
Seg_01:10386 mov S0CON, #8811h
Seg_01:1038A mov r0, #1FFh
Seg_01:1038E subb rl0, [r2+]
Seg_01:10390 mov S0_BaudRate, r0
Seg_01:10394 nop
Seg_01:10396 bclr S0R
Seg_01:10398 mov S0BG, ZEROS
Seg_01:1039C movb S0BG, [r2]
Seg_01:103A0 bset S0R
Seg_01:103A2 sub r1, #2AAh
Seg_01:103A6 cmp r1, #7
Seg_01:103A8 jnb Z, loc_103B0
Seg_01:103AC mov S0CON, #8832h
Seg_01:103B0
Seg_01:103B0 loc_103B0: ; CODE XREF: Seg_01:103A8j
Seg_01:103B0 mov r0, #6
Seg_01:103B2
Seg_01:103B2 Check_55h_byte: ; CODE XREF: Seg_01:103BEj
Seg_01:103B2 sub r0, #1
Seg_01:103B4 jb Z, loc_10310 ;
Seg_01:103B4 ;
Seg_01:103B8 callr Clear_S0RIR
Seg_01:103BA cmpb S0RBUF, #55h ; 'U'
Seg_01:103BE jnb Z, Check_55h_byte
Seg_01:103C2
Seg_01:103C2 SendInitAck: ; CODE XREF: Seg_01:10200j
Seg_01:103C2 mov S0TBUF, #0A0h ; '?'
Seg_01:103C6
Seg_01:103C6 StartReceiveFirstBoot: ; CODE XREF: Seg_01:103ECj
Seg_01:103C6 callr Clear_S0RIR
Seg_01:103C8 movbz r4, S0RBUF
Seg_01:103CC mov r0, #0FA00h
Seg_01:103D0 add r4, r0
Seg_01:103D2 movb rl5, #0
Seg_01:103D4
Seg_01:103D4 NextByte: ; CODE XREF: Seg_01:103DEj
Seg_01:103D4 callr Clear_S0RIR
Seg_01:103D6 movb [r0], S0RBUF
Seg_01:103DA xorb rl5, [r0+]
Seg_01:103DC cmp r0, r4
Seg_01:103DE jmpr cc_NZ, NextByte
Seg_01:103E0 callr Clear_S0RIR
Seg_01:103E2 cmpb rl5, S0RBUF
Seg_01:103E6 jmpr cc_Z, CorrectBootCRC
Seg_01:103E8 mov S0TBUF, #5Ah ; 'Z'
Seg_01:103EC jmpr cc_UC, StartReceiveFirstBoot
Seg_01:103EE ; ---------------------------------------------------------------------------
Seg_01:103EE
Seg_01:103EE CorrectBootCRC: ; CODE XREF: Seg_01:103E6j
Seg_01:103EE mov S0TBUF, #0A5h ; '?'
Seg_01:103F2 bclr S0TIR
Seg_01:103F4
Seg_01:103F4 Loop1: ; CODE XREF: Seg_01:103F4j
Seg_01:103F4 jnb S0TIR, Loop1
Seg_01:103F8 jmps 0, FirstBoot ' (FA00h)
цитата:
> странно, что сей факт, который легко посмотреть своими глазами, не мешает постоянно говорить о "загрузчиках в 32 байта и т.п."
Может, перечитай мой постинг внимательнее? Там вполне понятно написано, что прелоадер в 32 байта позволяет дальше грузить свои буты.
Ну, в общем, я уже изложил свои возражения... Он-то, может, и позволяет сам по себе. Но просто в телефонах все это не используется (по крайней мере на том уровне, на котором нам нужно).
цитата:
> То есть, просто ждет в цикле 55h, потом грузит куда-нибудь по FA00h (скорее всего) до 256 байт бута, исполняет их, потом грузит следующий и так далее...
И при этом BSL по-прежнему "к бутанью телефона имеет ну очень отдаленное отношение", да? Ну, извини… Тогда документация от Infineon случайно совпала с тем, что ты написал. Даже 055h.
Да нет, не случайно... Просто когда делали телефонный бутлоадер, отталкивались от оригинального BSL. Но у телефона и железо другое, и требования другие... Тем более, что когда делаешь лично свой девайс (а не универсальный микроконтроллер на продажу), можно делать, как тебе удобно, а не как надо покупателю. Вот и сделали... См. кусок кода выше.
цитата:
> К тому, что, как ты вообще собираешь скопировать второй флеш в первый?
Если бы знал, то не тратил бы время на форумах. Из анализа интерфейсов С166 и АТ45 само собой напрашивается, что он подключен к ASC1 - это уже зацепка. Если да, то протокол обмена в руки - и вперед. Если нет - будет видно.
Понятно. Ну ладно. Успехов! Я бы на твоем месте посмотрел, как к тому флешу сам телефон обращается. Прошивку поглядеть, все такое...
Но ASC1 - это мысль хорошая. Хотя и не бесспорная. Например, в оригинальных Сименсах на нем IrDA висит... Так что...
цитата:
> Вот-с. Высказался. Излил душу. )))
Именно. Извини, полезной информации - пока ноль, кроме того, что "все, в общем-то, плохо". Вместо того, чтобы поправить меня и _реально_ что-то подсказать. Я уважаю твои заслуги, но мне нужны все-таки полезные советы; а то, что все плохо - я и так знаю.
Ну вот. Еще и наехали. Я так просто... Увидел интересные мессаги, решил свое мнение высказать... А чего тут реально подсказывать? х40 у меня в данный момент на руках нет. А был в свое время очень недолго и квалификация тогда была не ахти, так что не очень много посмотрел и не очень много понял... Сейчас бы дали - поглядел бы больше.
В общем, не надо сразу наезжать. Как будто высказаться уже нельзя... |
____________________________
... Не жалею о том, что сделал, думаю о том, что сделаю...
--- Пусть всегда будет SKY! А также CX65/1603 под МегаФон ПриемЧастный (Москва)
* Origin Остановите Землю - я сойду... |
|