Работа с 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. При записи чистого контроллера, предварительно нужно запись в негоEepromConfig.
Практика
Теперь практика.
Выбираем контроллер 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 эмулятор еепрома.