Микросхема Flash-памяти
К1636РР4У имеет в своём составе для взаимодействия два последовательных и параллельный интерфейсы (суммарно три). В реальном применении может стоять задача оптимизации количества используемых выводов, и в таком случае лучшим решением будет использование одного из последовательных интерфейсов.
1.
Первый из последовательных интерфейсов, о котором и пойдет речь в настоящей статье -
Последовательный интерфейс FLASH. Данный интерфейс использует для своей работы выводы:
TDI, TCK, STROBE и MRST.
2. Второй последовательный интерфейс -
Последовательный интерфейс SPI. Данный интерфейс использует для своей работы выводы:
nCE, SCK, SI, SO.
Оба интерфейса предоставляют доступ к одним и тем же функциям работы с памятью (чтение, запись, стирание: важно отметить, что в последовательном интерфейсе SPI больше вариаций команд, например, можно выполнить очистку либо блока, либо всей микросхемы - базовые же операции одинаковы), но через разные протоколы и управляющие сигналы.
Рассмотрим систему, которая будет работать с
последовательным интерфейсом FLASH. Типовая схема такого включения приведена на рисунке 1 (
выдержка из официальной документации на микросхему):

Рисунок 1 - Типовая схема включения микросхемы при эксплуатации в режиме работы по последовательному интерфейсу
Для организации взаимодействия по данному последовательному интерфейсу со стороны внешнего устройства
удобно использовать интерфейс SPI в режиме с
SPO = 1 и SPH = 1, который будет учитывать специфику внутреннего протокола, в рамках которого, например, потребуется самостоятельно управлять выводом
STROBE (на стороне внешнего устройства это линия
SSP_FSS).
Для реализации драйвера по работе с последовательным интерфейсом FLASH по SPI
(пример доступен в конце статьи, в разделе "Файлы для скачивания"), который может быть портирован для любого управляющего контроллера, применялась связка микросхемы К1986ВЕ91Т и К1636РР4У. Схема подключения представлена на рисунке 2:

Рисунок 2 - Подключение микросхемы памяти К1636РР4У и микроконтроллера К1986ВЕ91Т
Важным аспектом при реализации драйвера стоит отметить разметку памяти в зависимости от битов
Num[3:0] (активный уровень "1") в командной последовательности. Для более глубокого понимания раскладка памяти представлена на рисунке 3:

Рисунок 3 - Раскладка памяти микросхемы К1636РР4У в зависимости от битов Num[3:0] при работе с последовательным интерфейсом FLASH
Из рисунка 3 следует, что если стоит задача обратиться, например, ко второму подблоку шестого блока памяти
(всего их восемь, каждый блок объемом по 2 Мбит: блок при этом делится на два подблока, то есть каждый подблок объемом по 1 Мбит), необходимо при организации командной последовательности задать значение
Num[3:0] равное
0b1011.
Основные особенности реализованного драйвера:
- Реализованный драйвер предоставляет следующий функционал: запись полуслова (16 бит), чтение полуслова (16 бит), стирание блока памяти (2 Мбит) и отдельная функция, тестирующая отдельно взятый подблок (1 Мбит) памяти.
- Драйвер завязан на работе стандартного интерфейса SSP, который используется во многих микроконтроллерах компании "Миландр", при этом частота микроконтроллера должна быть 80 МГц.
- "Ручное" управление выводом STROBE. При портировании можно использовать любой вывод GPIO.