diff --git a/README.md b/README.md index b3aecfd..5055797 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,42 @@ # Библиотеки для работы с внешними FLASH, EEPROM -Папка CubeKeil Example содержит проект, который демонстрирует работу с библиотеками. +Папка _CubeKeil Example_ содержит проект, который демонстрирует работу с библиотеками. -Папка GENERAL содержит кастомные библиотеки для периферии. В данном проекте используется только "gpio_general.c/.h" и общий файл "peripheral_general.h" для настройки GPIO для SPI. +Папка _GENERAL_ содержит кастомные библиотеки для периферии. В данном проекте используется только "_gpio_general.c/.h_" и общий файл "_peripheral_general.h_" для настройки GPIO для SPI. -Папка spi_flash содержит библиотеку для SPI Flash: два файла "spi_flash.c/.h". \ No newline at end of file +Папка _memory_spi_ содержит библиотеку для SPI памяти (FLASH/EEPROM): два файла "_spi_flash.c/.h_". + +# Функции +Общение с памятью на уровне железа выполняют [функции для команд](#функции-для-команд). +Координацию команд выполняют [функции для внутреннего использования](#функции-для-внутреннего-использования). +А запросы на запись/чтение/очистку произвольного кол-ва байт выполняют [функции для пользователя](#функции-для-пользователя). + +### Функции для пользователя + - MEMSPI_Base_Init() Инициализация переферии SPI и GPIO для внешней памяти + - MEMSPI_Read_Memory() Считывание внешней FLASH/EEPROM + - MEMSPI_EEPROM_Write() Запись данных в внешнюю EEPROM + - MEMSPI_FLASH_Write() Запись данных в внешнюю FLASH (функция сама очищает нужные сектора, и если надо сохраняет выбранные данные) + - MEMSPI_FLASH_Program() Программирование внешней FLASH (выбранный участок FLASH должен быть очищен) + - MEMSPI_FLASH_Erase() Очистка внешней FLASH + +С помощью данных функций предлагается управлять внещней памятью. Эти функции имеют "неограниченый" доступ к памяти. Т.е. они могут записывать данные размером больше страницы и очищать несколько секторов за один вызов. +При вызове этих функций проверяется свободно ли устройство. И если свободно то начинают с ним соответсвующую работу. Возможно также ожидание в конце, когда нужная операция выполниться. + +Функция инициализации **MEMSPI_Base_Init()** содержит базовые настройки для перефирии SPI и GPIO. Пользователь только настраивает SPI Instance, BaudratePrescaler и порты ввода/вывода для общения с памятью. + +### Функции для внутреннего использования + - MEMSPI_EEPROM_Write_Page() Запись страницы в EEPROM + - MEMSPI_FLASH_Erase_Sector() Очистка сектора FLASH. + - MEMSPI_FLASH_Program_Page() Программирование страницы. + - MEMSPI_WriteEnablingUntilTimeout() Разрешение записи, пока не будет ответа или не истек таймаут + - MEMSPI_WaitOnFlagsUntilTimeout() Ожидание флага пока не истек таймаута + +Функции **Write**, **Erase**, **Program** работают напрямую с командами SPI для памяти. Соответственно имеют те же ограничения, что и команды: запись памяти только в пределах страницы, и очистка памяти только по секторам. +Они проверяют свободно ли устройство (бит **BUSY** в **Status Register**). И если да, отправляют команду на разрешение записи. И если запись разрешена (бит **WEL** в **Status Register**), начинают с ней работать. Также эти функциии в конце могут ожидать, пока устройство не выполнит нужную операцию с памятью (бит **BUSY** в **Status Register**) ИЛИ просто выйти из функции не дожидаясь конца операции. + +Функции UntilTimeout нужны для ожидания некоторого события до истечения таймаута: +- WriteEnabling: посылает команду для разрешения записи и ожидает когда запись разрешится ИЛИ когда истечет таймаут +- WaitOnFlags: ожидает выставления выбранных флагов ИЛИ когда истечет таймаут + +### Функции для команд +Данные функции начинаются с **MEMSPI_CMD_...()**. Они посылают соответствующие команды и принимают ответ. Также на время команды все функции выставляют Chip Select для выбранного устройства. А функция **MEMSPI_CMD_Read_Status_Register()** имеет параметр, который позволяет не убирать Chip Select после команды для постоянного мониторинга Status Register. Прием с помощью **MEMSPI_SPI_Receive()**. \ No newline at end of file