Перейти к основному содержимому

Работа с mc56f84xxx

Теория введение

Итак для начала теория. Вы должны хотя бы примерно это понимать, чтобы работать с этими контроллерами-памятью. Это не касается обычной ProgrammFlash (P_Flash) - здесь все работает как обычно.

У контроллеров 56F844x/5x/7x есть так называемый EEE (Enhanced EEPROM) или по-русски эмулятор eeprom во флеш-памяти, сделано оно с интересным механизмом выравнивания износа (wear leveling). Судя по всему решение инженеров моторолы перекочевало в Freescale-NXP (на mke и прочих такое же решение). USBDM

Работает все это следующим образом: есть два физических сегмента памяти : FlexNVM(Data Flash или D-Flash) спец флешка и FlexRAM (спец оперативка).

Есть три назначения у памяти:

  • D-Flash - память данных, не еепром. Просто константы во флеш памяти.
  • EEE - эмуляция еепрома, зеркало еепрома во FlexRAM.
  • EEPROM_backup - скомпрессированый бэкап еепрома, прямого доступа нет у пользователя или программатора.

Теория алгоритм

Размер этих разделов по назначению заранее не известен. Для определения или изменения размеров (сегментации) создан набор регистров, назовем их EepromConfig. Теперь инженеры производителя систему построили следующим образом:

  1. При первой записи контроллера мы делаем сегментацию, определяя размеры трех областей. По умолчанию (если стереть проц) у нас полностью доступен D-Flash (f565 - 32 килобайта например) и нет еепром и бэкапа (0 байт).
  2. Теперь размер D-Flash например 24кб, а размер EEE например 256 байт.
  3. Для записи в еепром пишут не в сам еепром, а в FlexRAM (EEE), потом контроллер сам внутри копирует то что записали во FlexRAM, компрессирует и сохраняет в EEPROM_backup.
  4. Для чтения дается команда выгрузки из EEPROM_backup в FlexRam(EEE).
  5. DataFlash мы можем читать только тот размер который был сегментирован.
  6. Все что выходит за пределы сегментации у разделов не будет прочитано, и не должно. MultiProg эти остатки забивает нулями = 0x0.
  7. То что вы должны были понять к этому пункту - если при чтении контроллера с платы вы не сохранили себе никуда EepromConfig (данные сегментации разделов) то при записи чистого контроллера вы никогда
    D-Flash & Eeeprom нормально не запишите. При записи разумеется предварительно его надо записать, перед записью.

Практика

Теперь практика. Выбираем контроллер 84565 (или другой с таким типом памяти). Появилась кнопочка EEP_CONFIG. Она пока неактивна. USBDM После коннекта с контроллером, она станет активна. Также в логе видим строчку

[SUCCESS] Read EEP_Config: EEESIZE : 0x6, Depart : 0x1, FlexRAM EEP size : 256 bytes, D-Flash size 24576 bytes

Мы считали регистры сегментации разделов.

Пока ничего не делаем, нажимаем на EEP_CONFIG. USBDM Появилось вот такое окошечко.

Окошко активно только после коннекта, чтобы получить доступ к кнопке-окошку нужно сделать коннект. И рекомендуется если мы собираемся что-то делать (писать-читать) сначала сделать все операции с конфигом как раз после коннекта.

Если мы собираемся читать этот контроллер, сначала нужно сохранить конфиг еепрома (настройки сегментации). Нажимаем Save to file.

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

И затем (после Load from File нового конфига) станет активной кнопка Apply (запись нового конфига-сегментации).

При нажатии на Close запись не происходит. USBDM После стирания конфигурация внутри контроллера обнуляется на дефолт.

У данного 565 32кб DataFlash, 0 эмулятор еепрома.