Структура 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:
EELITE:
Так, теперь давайте для закрепления, выберим блок, и найдём его во FLASH вручную. Прежде чем преступить, знайте блоки не имеют постоянного адреса, при их перезаписи скорее всего они поменяют адрес, так что не пытайтесь найти что-то по этим адресам, которые я сейчас приведу от своего телефона.
Возьмём, к примеру, блок 285, не вооружённым глазом видно, что это EELITE-блок, после тщательного поиска в EIT от EELITE, видим элемент по адресу 0xA003FE90, смотрите скрин:
[Не сохранилось изображение: Ручной поиск EEPROM-блока Шаг #1]
Статус: 0xFFFFFFC0 - рабочий блок, номер блока: 285 (0x11D), размер 28 байт (0x1D - 1), смещение равно 0x874, т.е. адрес блока равен 0xA0020000 + 0x874 = 0xA0020874:
[Не сохранилось изображение: Ручной поиск EEPROM-блока Шаг #2]
Версия находится по адресу: 0xA0020874 + 28 = 0xA0020890 и она равна 12 (0x0C).
Для вашего облегчения написал ф-ии по работе с EEPROM'oм (только чтение) в этом файле eeprom_info.c
Предыдущая страница: Структура и описание файла *.srt
Следующая страница: Nucleus PLUS
Источник страницы: 2014-06-25. Открыть в Wayback Machine · Редакция 2012-02-22