27
правокИзменения
Нет описания правки
== Общие сведения ==
Функции процессора телефонов Motorola серии [[P2K ]] выполняет микросхема [[Neptune]]. Существует несколько её версий ([[LCA|LT]], [[ULS]], [[LTE]], [[LTE2]]), различающихся, в первую очередь, содержимым внутреннего ПЗУ - [[irom]].
Процессор начинает работать сразу после включения питания. Включение питания происходит при:
# Установке аккумуляторной батареи в телефон
# Подключении зарядного устройства
# Нажатии на клавишу отмены вызова
При подаче напряжения питания схема POR (Power-on Reset, сброса при включении питания) срабатывает, и ядро ARM7TDMI-S (далее [[MCU, Microcontroller Unit]]) начинает выполнение программы с адреса 0x00000000 в режиме RESET. Одновременно начинает выполнение ядро DSP56600 (далее [[DSP]]).
== Начало работы ==
[[DSP ]] всегда начинает работу с кода, записанного в [[irom]], и этот адрес постоянен. Что касается [[MCU]], то конфигурация его адресного пространства зависит от уровня на выводе MOD [[Neptune]]:# Если на выводе MOD высокий логический уровень, по адресу 0x00000000 находится [[irom]], а по адресу 0x10000000 находится микросхема внешней памяти, идентифицируемая по сигналу выбора CS0 (активному на низкий уровень).# Если на выводе MOD низкий логический уровень, по адресу 0x00000000 находится микросхема внешней памяти, подключенная к CS0, а по адресу 0x10000000 - [[irom]].
Вывод MOD снабжён подпорным резистором, так что если он не подключен, на нём наблюдается высокий логический уровень. В моделях телефонов с микросхемой Neptune LT этот вывод через внешний резистор малого сопротивления подключен к общему проводу. У всех моделей к CS0 подключена микросхема флеш-памяти. <br>
Таким образом, на моделях с [[LCA|Neptune LT ]] первым получает управление Boot Core (буткор) первого уровня, а во всех остальных моделях - стартовый код в irom. Рассмотрим их функции и порядок их действий.
== Запуск моделей на базе Neptune LT ==
Буткор первого порядка выполняет следующие функции:
# Инициализирует процессор
# Проверяет наличие буткора второго порядка; при его отсутствии инициализирует USB, и телефон определяется как "Blank LCA Neptune" с интерфейсом [[Motorola Boot]].
# Запускает буткор второго порядка
Буткор второго порядка:
# Проверяет наличие прошивки; при её отсутствии инициализирует USB, и телефон определяется как "Flash LCA Neptune" с интерфейсом [[Motorola Flash]]
# Запускает прошивку
При замыкании +1,875 Вольта (питания процессора) на точку MOD по адресу 0x00000000 оказывается [[irom]], в котором находится функциональный аналог буткора первого порядка. Этот приём называется "[[TestPoint|тест-поинт]" и на [[LCA|LCA-моделях (Neptune LT) ]] используется для начальной заводской прошивки телефона, а также для его восстановления в случае порчи повреждения буткора первого или второго порядка.
== Запуск моделей на базе других версий Neptune ==
У моделей на других версиях Neptune вывод MOD никуда не подключен (но выведен в качестве тестовой площадки на плату), поэтому на них управление первым получает стартовый код в [[irom]]. Этот стартовый код выполняет следующие действия:
# Инициализирует процессор
# Инициализирует интерфейс внешней памяти - включает CS0
# Проверяет наличие [[Boot Loader (бутлоадера, бута) loader]]а на микросхеме флеш-памяти; при его отсутствии запускается [[Boot loader|бут]], встроенный в irom# Проверяет цифровую подпись [[Boot Loaderloader]]а. При отрицательном исходе проверки запускается [[Boot loader|бут]], встроенный в [[irom]]# Проверяет наличие прошивки. При её отсутствии запускается [[Boot loader|бут ]] с флеш-памяти# Проверяет цифровую подпись прошивки. При отрицательном исходе проверки запускается [[Boot loader|бут]], встроенный в [[irom]]. Логика этого шага непонятна.
# Запускает прошивку
== Немного о бутлоадерах ==
# Собственно выполняет прошивание.
# Инициализирует контроллер питания и дисплей
# Определяет версию и состояние прошивки
# Отображает на дисплее свою версию и версию прошивки, сообщения об ошибках (при их наличии)
# Инициализирует USB; телефон определяется как "S Flash Neptune [[LTE]]/[[LTE2]]" (на телефонах с [[ULS|Neptune ULS ]] как такового бутлоадера [[boot loader]]а в флеш-памяти нет).
== Структура прошивки ==
Заголовок бутлоадера[[boot loader]]а, находящегося в флеш-памяти, содержит указатели на:# Точку входа в бутлоадер[[boot loader]]# Сертификат подписи бутлоадера[[boot loader]]а
# Заголовок прошивки
Заголовок прошивки содержит указатели на:
# Точку входа в прошивку
# [[CG1]], [[CG3]], [[CG4]], [[CG7 ]] (при её наличии), [[CG15 ]] (при её наличии), [[CG18]]. Заголовок [[CG18 ]] содержит указатель на сертификат подписи прошивки.
== Варианты ==
В ряде бутлоадеров [[boot loader]]ов для [[LTE|LTE-моделей ]] (и всех бутлоадерах [[boot loader]]ах для [[LTE2|LTE2-моделей]]) в поле для указателя на заголовок прошивки записан указатель на подменный заголовок, содержащий следующие данные:# В качестве точки входа в прошивку - адрес кода дополнительной проверки прошивки, лежащего внутри [[Boot loader|бута]]# В качестве указателей на кодовые группы - произвольные данные (возможно, 0xFFFFFFFF), кроме указателя на CG18 - он содержит указатель на подменный заголовок [[CG18]], лежащий внутри [[Boot loader|бута ]] и указывающий на сертификат подписи [[Boot loader|бута]].Таким образом, вместо проверки прошивки [[irom ]] во второй раз проверяет [[Boot loader|бут ]] и запускает в нём код дополнительной проверки. Этот код проверяет подпись прошивки и в случае отрицательного исхода запускает собственно бутлоадер[[boot loader]].