Архив SieDevelop · Оглавление и файлы · О восстановлении · Что не найдено

Структура EEPROM

Структура EEPROM на SGold X65 и X75

EEPROM - это одна из областей FLASH, в ней обычно содержатся различные настройки. Она представляет собой 2 разорванные области EEFULL и EELITE. В каждой из них присутствует EIT - это таблица распределения блоков в адресном пространстве. EIT начинается с конца (снизу) на вверх,  (в начало) и с длиной в зависимости от количества блоков. Последний элемент таблицы есть элемент, перед которым есть массив с длиной 16 (0x10), заполненный байтами 255 (0xFF). Блоки это небольшие участки памяти, в которых и содержатся данные и настройки. Каждый блок имеет свой номер, адрес (а точнее смещение от начала области), версию и размер. По своей сути блоки схожи с файлами.  EEFULL и EELITE находятся в разных концах FLASH. EEFULL в свою очередь разделён на 2 последовательные части EEFULL1 и EEFULL2, в них, соответственно, свои таблицы EIT.

 


SGold X65 (SL65 / CX70 / S65 / SK65 / и подобные / C65 / M65 / и т.д.):

Область Начало Конец EIT
EELITE 0xA0FE0000 0xA0FFFFFF 0xA0FFFFF0
EEFULL1 0xA0220000 0xA023FFFF 0xA023FFF0
EEFULL2 0xA0240000 0xA025FFFF 0xA025FFF0

 

SGold X75 (C72 / C75 / ME75 / CF75 / CX75 / M75 / и подобные):

Область Начало Конец EIT
EELITE 0xA0020000 0xA003FFFF 0xA003FFF0
EEFULL1 0xA1FC0000 0xA1FDFFFF 0xA1FDFFF0
EEFULL2 0xA1FE0000 0xA1FFFFFF 0xA1FFFFF0

 


Здесь изображена структура EIT:

[Не сохранилось изображение: Структура EIT ]

Пояснения к рисунку:

Адрес первого элемента таблицы EIT любой области можно  посмотреть из таблиц,  приведённых выше, в зависимости от платформы рассматриваемого телефона (смотрите EIT). Далее таблица идёт "на вверх", то есть с уменьшением адреса. до  массива 0xFF. Каждый элемент (дескриптор) таблицы есть 16 байт, по 4 байт на параметр элемента, а именно: статус, номер, размер и смещение блока:

Статус:

Он определяет используется ли этот элемент. 0xFFFFFFC0 - используется, то есть по этому дескриптору можно найти блок.  0xFFFFFF00 - не используется, то есть блок уже удалён или перенесён в другое место.

Номер:

Этот параметр показывает под каким номером будет определятся блок. Однако в области EEFULL надо иметь ввиду, что  номер блока в таблице EIT надо прибавить на 5000 это будет реальный номер блока.

Размер:

Ну тут всё ясно, это параметр показывает размер блока. Ну опять же, есть одно замечание, но об этом ниже.

Смещение:

Смещение - это значение которое надо прибавить к начальному адресу соответсвующей области, для определения адреса блока, то есть если EIT от EELITE, то прибавляем адрес начала EELITE, если EIT от EEFULL1, то прибавляем адрес EEFULL1, если EIT от EEFULL2, то, соответственно, адрес EEFULL2. Есть замечание, но об этом ниже.

 

Теперь надо пояснить структуру блока (началось то самое замечание) . Оказывается в структуре блока EEFULL и EELITE есть маленькие различия. А именно:

EELITE  Блок: { [ Сами данные блока ]  [Версия: byte] }

EEFULL Блок: { [Версия: byte]  [ Сами данные блока ] }

Но стоит и заметить, что блок в нашем представлении это только данные, поэтому, когда будете брать адрес и размер с таблицы EIT, нужно их скорректировать для текущей области:

 


EEFULL:

Реальный адрес блока = адрес начала EEFULLN + смещение из EIT + 1
Реальный размер блока = размер из EIT - 1
Версия есть байт по адресу =  адрес начала EEFULLN + смещение из EIT

 

EELITE:

Реальный адрес блока = адрес начала EELITE + смещение из EIT
Реальный размер блока = размер из EIT - 1
Версия есть байт по адресу =  адрес начала EELITE + смещение из EITразмер из EIT

Так, теперь давайте для закрепления, выберим блок, и найдём его во FLASH вручную. Прежде чем преступить, знайте блоки не имеют постоянного адреса,  при их перезаписи скорее всего они поменяют адрес, так что не пытайтесь найти что-то по этим адресам, которые я сейчас приведу от своего телефона.

Возьмём, к примеру, блок 285, не вооружённым глазом видно, что это EELITE-блок, после тщательного поиска в  EIT от EELITE, видим элемент по адресу 0xA003FE90, смотрите скрин:

[Не сохранилось изображение: Ручной поиск EEPROM-блока Шаг #1]

 

Статус: 0xFFFFFFC0 - рабочий блок, номер блока: 285 (0x11D), размер 28 байт (0x1D - 1), смещение равно 0x874, т.е. адрес блока равен 0xA0020000 + 0x8740xA0020874:

[Не сохранилось изображение: Ручной поиск EEPROM-блока Шаг #2]

Версия находится по адресу: 0xA0020874 + 28 0xA0020890 и она равна 12 (0x0C).

Для вашего облегчения написал ф-ии по работе с EEPROM'oм (только чтение) в этом файле eeprom_info.c



Предыдущая страница: Структура и описание файла *.srt
Следующая страница: Nucleus PLUS


Источник страницы: 2014-06-25. Открыть в Wayback Machine · Редакция 2012-02-22