Работа с mc56f84xxx
Теория введение
Итак для начала теория.
Вы должны хотя бы примерно это понимать, чтобы работать с этими контроллерами-памятью.
Это не касается обычной ProgrammFlash (P_Flash)
- здесь все работает как обычно.
У контроллеров 56F844x/5x/7x
есть так называемый EEE (Enhanced EEPROM)
или по-русски эмулятор eeprom во флеш-памяти, сделано оно с интересным механизмом выравнивания износа (wear leveling).
Судя по всему решение инженеров моторолы перекочевало в Freescale-NXP
(на mke и прочих такое же решение).
Работает все это следующим образом:
есть два физических сегмента памяти : FlexNVM(Data Flash или D-Flash)
спец флешка и FlexRAM
(спец оперативка).
Есть три назначения у памяти:
D-Flash
- память данных, не еепром. Просто константы во флеш памяти.EEE
- эмуляция еепрома, зеркало еепрома воFlexRAM
.EEPROM_backup
- скомпрессированый бэкап еепрома, прямого доступа нет у пользователя или программатора.
Теория алгоритм
Размер этих разделов по назначению заранее не известен.
Для определения или изменения размеров (сегментации) создан набор регистров, назовем их EepromConfig
.
Теперь инженеры производителя систему построили следующим образом:
- При первой записи контроллера мы делаем сегментацию, определяя размеры трех областей. По умолчанию (если стереть проц) у нас полностью доступен
D-Flash
(f565 - 32 килобайта например) и нет еепром и бэкапа (0 байт). - Теперь размер
D-Flash
например 24кб, а размерEEE
например 256 байт. - Для записи в еепром пишут не в сам еепром, а в
FlexRAM (EEE)
, потом контроллер сам внутри копирует то что записали воFlexRAM
, компрессирует и сохраняет вEEPROM_backup
. - Для чтения дается команда выгрузки из
EEPROM_backup
вFlexRam(EEE)
. - DataFlash мы можем читать только тот размер который был сегментирован.
- Все что выходит за пределы сегментации у разделов не будет прочитано, и не должно. MultiProg эти остатки забивает нулями = 0x0.
- То что вы должны были понять к этому пункту - если при чтении контроллера с платы вы не сохранили себе никуда
EepromConfig
(данные сегментации разделов) то при записи чистого контроллера вы никогда
D-Flash & Eeeprom
нормально не запишите. При записи разумеется предварительно его надо записать, перед записью.
Практика
Теперь практика.
Выбираем контроллер 84565
(или другой с таким типом памяти). Появилась кнопочка EEP_CONFIG
. Она пока неактивна.
После коннекта с контроллером, она станет активн а. Также в логе видим строчку
[SUCCESS] Read EEP_Config: EEESIZE : 0x6, Depart : 0x1, FlexRAM EEP size : 256 bytes, D-Flash size 24576 bytes
Мы считали регистры сегментации разделов.
Пока ничего не делаем, нажимаем на EEP_CONFIG
.
Появилось вот такое окошечко.
Окошко активно только после коннекта, чтобы получить доступ к кнопке-окошку нужно сделать коннект. И рекомендуется если мы собираемся что-то делать (писать-читать) сначала сделать все операции с конфигом как раз после коннекта.
Если мы собираемся читать этот контроллер, сначала нужно сохранить конфиг еепрома (настройки сегментации).
Нажимаем Save to file
.
Теперь, если мы собираемся писать после коннекта нужно загрузить конфиг контроллера который мы до этого считали.
И затем (после Load from File
нового конфига) станет активной кнопка Apply
(запись нового конфига-сегментации).
При нажатии на Close запись не происходит.
После стирания конфигурация внутри контроллера обнуляется на дефолт.
У данного 565 32кб
DataFlash, 0
эмулятор еепрома.