Программирование DSP Flash Programmer для Serial Flash Micron M25Pxx Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Flash Programmer для Serial Flash Micron M25Pxx Печать
Добавил(а) microsin   

Для поддержки программирования микросхем последовательной памяти Micron серии M25P мною был написан драйвер Flash Programmer для среды IDE VisualDSP++ [1].

За основу был взят драйвер для микросхем Serial Flash M25P16 для компании Micron, исходный код которого поставлялся вместе с VisualDSP++ 5.0 (находится в каталоге Blackfin\lib\src\drivers\flash\M25P16\). Что изменено по сравнению с оригинальной версией:

1. Кроме M25P16, также поддерживаются микросхемы Serial Flash M25P80, M25P32, M25P64, M25P128. Количество секторов и их размер определяются не константами, а вычисляются на основе идентификатора UID, прочитанного из регистра микросхемы.

Микросхема UID Количество секторов Емкость
M25P80 14h 2 сектора по 32 килобайта 1 мегабайт
M25P16 15h 32 сектора по 64 килобайта 2 мегабайта
M25P32 16h 64 сектора по 64 килобайта 4 мегабайта
M25P64 17h 128 секторов по 64 килобайта 8 мегабайт
M25P128 18h 64 сектора по 256 килобайт 16 мегабайт

2. Раньше запись и чтение осуществлялись по одному байту, теперь сразу блоками размером до 256 байт (по размеру страницы). Поэтому все операции с памятью происходят гораздо быстрее, и меньше расходуется ресурс FLASH.

3. Для упрощения кода удалена поддержка записи и чтения данных с интервалом (величина параметра Stride может быть только равной 1).

4. Для отладки добавлена возможность вывода сообщений в порт UART0 (макрос umsg).

Перед записью новой программы в микросхему серии M25P её память должна быть стерта (стертое содержимое получает байты FFh). Тут есть два варианта - либо она может быть стерта целиком, либо по секторам, в зависимости от того, в какие секторы должна занимать новая прошивка. Вся память целиком стирается командой BULK ERASE (код команды C7h, константа SPI_BE). Секторы по отдельности стираются командой SECTOR ERASE (код команды D8h, константа SPI_SE), при этом стираются все страницы сектора (всего в секторе sectorsize/256 страниц).

Микросхема Serial Flash подключается к порту SPI0, чтобы можно было осуществлять с неё загрузку процессора. Драйвер тестировался на микросхеме M25P80 [4] и процессоре ADSP-BF538F. Схема подключения к процессору:

ADSP BF538 SPI FLASH M25P80

Чтобы исполняемый код мог загружаться, на входы BMODE0 и BMODE1 процессора нужно подать лог. 1 [2, 3]. Для формирования загружаемого образа в свойствах проекта нужно выбрать 8-битный файл загрузчика, формат может быть HEX или двоичный:

ADSP BF538 SPI FLASH M25P80 loader file format

Код из Serial Flash грузится заметно медленнее, чем из Parallel Flash. Двоичный файл размером 32 килобайта загружается примерно за секунду.

[Что еще можно улучшить в драйвере]

1. Разобраться с задержками. Либо выкинуть их совсем, либо пересчитать их в реальные интервалы времени на основе тактовой частоты процессора. Это должно ускорить работу драйвера.

2. Вернуть поддержку интервалов адреса (stride) при работе с памятью.

Исходный код и исполняемый DXE-файл драйвера можно скачать по ссылке [5].

[Ссылки]

1. VisualDSP API программирования FLASH для процессоров Blackfin.
2. Как происходит загрузка ADSP-BF533 Blackfin.
3. Blackfin: утилита elfloader.exe.
4. Micron M25P80 Serial FLASH.
5. 190121FlashProgrammer-M25P.zip - исходный код и исполняемый файл драйвера (Debug\FlashDriver_M25Pxx.dxe).

 

Добавить комментарий


Защитный код
Обновить

Top of Page