// Файл с прототипами низкоуровневых комманд для W25Q16JV. // v 1.0 от 12/10/20 // Автор: Сычев А. #ifdef W25Q16JV_H #if defined(W25Q16JV_LOWLEVEL) || defined(W25Q16JV_APILEVEL) // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ // №№№№№№№№№№№№№№№№№№№№№№ НИЗКОУРОВНЕВЫЕ НЕБЕЗОПАСНЫЕ ФУНКЦИИ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ // // подробнее см. W25QXXX_LL.c // // -------------------------------------------------------------------------------------------------------- typedef struct { struct { void (* writeDisable )(); // запрещение команд записи / __flash_hal__writedisable void (* writeEnable )(); // разрешение команд записи / __flash_hal__writeenable } operations; struct { void (* statusRead1 )( __flash_status1_t * pcReadRegister ); // чтение регистра статуса / __flash_hal__statusRead1 void (* statusRead2 )( __flash_status2_t * pcReadRegister ); // чтение регистра статуса / __flash_hal__statusRead2 void (* statusRead3 )( __flash_status3_t * pcReadRegister ); // чтение регистра статуса / __flash_hal__statusRead3 void (* statusWrite1)( __flash_status1_t * pcReadRegister ); // запись регистра статуса / __flash_hal__statusWrite1 void (* statusWrite2)( __flash_status2_t * pcReadRegister ); // запись регистра статуса / __flash_hal__statusWrite2 void (* statusWrite3)( __flash_status3_t * pcReadRegister ); // запись регистра статуса / __flash_hal__statusWrite3 } status; struct { void (* securityRegister1Erase)(); // стирание регистра 1 безопасности / __flash_hal__securityRegister1Erase void (* securityRegister2Erase)(); // стирание регистра 2 безопасности / __flash_hal__securityRegister2Erase void (* securityRegister3Erase)(); // стирание регистра 3 безопасности / __flash_hal__securityRegister3Erase void (* securityRegister1Write)(__flash_securityregister_t * contents); // запись регистра 1 безопасности / __flash_hal__securityRegister1Write void (* securityRegister2Write)(__flash_securityregister_t * contents); // запись регистра 2 безопасности / __flash_hal__securityRegister2Write void (* securityRegister3Write)(__flash_securityregister_t * contents); // запись регистра 3 безопасности / __flash_hal__securityRegister3Write void (* securityRegister1Read)(__flash_securityregister_t * contents); // чтение регистра 1 безопасности / __flash_hal__securityRegister1Read void (* securityRegister2Read)(__flash_securityregister_t * contents); // чтение регистра 2 безопасности / __flash_hal__securityRegister2Read void (* securityRegister3Read)(__flash_securityregister_t * contents); // чтение регистра 3 безопасности / __flash_hal__securityRegister3Read } security; struct { void (* globalLock)(); // установить блокировку записи на все сектора/блоки / __flash_hal__globalLock void (* globalUnlock)(); // снять блокировку записи со всех секторов/блоков / __flash_hal__globalUnlock void (* protectStateWrite)( size_t nProtSector, bool protectState ); // записывает индивидуальную блокировку сектора/блока / __flash_hal__protectStateWrite bool (* protectStateRead)( size_t nProtSector ); // считывает индивидуальную блокировку сектора/блока / __flash_hal__protectStateRead } protection; struct { void (* sleepMode)(); // переход в режим энергосбережения / __flash_hal__sleepMode void (* wakeUp)(); // выход из режима энергосбережения / __flash_hal__wakeUp } sleep; struct { void (* arrayRead)( __FLASH_DWORD w24Address, __FLASH_BYTE * pDataRead, __FLASH_WORD wCntToRead ); // последовательное чтение (массив) / __flash_hal__arrayRead void (* chunkProgram)( __flash_pageprogramptr_t pdata, __FLASH_DWORD w24Address); // программирование страницы без стирания блока/страницы / __flash_hal__chunkProgram void (* pageErase)( __FLASH_WORD wPageNum ); // стирание страницы / __flash_hal__pageErase void (* sectorErase)( __FLASH_WORD wSector ); // стирание сектора / __flash_hal__sectorErase } data; struct { __FLASH_DWORD (*manufacturerIdRead)( __flash_id_t * pManufacturerID ); // чтение идентификатора производителя / __flash_hal__manufacturerIdRead void (*uniqueIdRegisterRead)( __flash_uniqueidregister_t * contents ); // прочитывает регистр уникального идентификатора (UniqueID) / __flash_hal__uniqueIdRegisterRead bool (*uniqueIdRegisterValidate)( __flash_uniqueidregister_t * contents ); // прочитывает регистр UniqueID и выполняет его проверку / __flash_hal__uniqueIdRegisterValidate } id; struct { flash_err_t (*startupDetect)(); // Низкоуровневая инициализация флешпамяти / __flash_hal__startupDetect flash_err_t (*initialize)(); // Низкоуровневая инициализация флешпамяти / __flash_hal__initialize flash_err_t (*finalizePrepare)(); // Низкоуровневая функция для подготовки флешпамяти к деинициализации драйвера / __flash_hal__finalize_prepare flash_err_t (*dirtyDetect)(); // Низкоуровневое определение наличия чипа (доступности) / __flash_hal__dirtyDetect void * (*getBuf)( __flash_internal_buffer_type_t type, size_t * pRetBufSize ); // запросить внутренний буфер низкого уровня / __flash_hal__getBuffer } service; #if W25QXXX_POWER_MANAGEMENT > 0 struct { void (*powerOn)(); // реализует управление питанием микросхемы памяти (подает питание) / __flash_hal__power_on void (*powerOff)(); // реализует управление питанием микросхемы памяти (снимает питание) / __flash_hal__power_off void (*powerPulse)( __FLASH_WORD nCooldownTime_ms, __FLASH_WORD nStartupTime_ms ); // реализует управление питанием микросхемы - формирует импульс перезагрузки / __flash_hal__power_pulse } power; #endif #if W25QXXX_RESET_MANAGEMENT > 0 struct { void (*resetAssert)(); // реализует управление сигналом сброса микросхемы памяти (устанавливает сигнал сброса) / __flash_hal__reset_assert void (*resetRelease)(); // реализует управление сигналом сброса микросхемы памяти (снимает сигнал сброса) / __flash_hal__reset_release void (*resetPulse)(); // реализует управление сигналом сброса микросхемы памяти (подает законченный импульс сброса) / __flash_hal__reset_pulse } reset; #endif struct { flash_err_t (*getReadyFast)(); // проверка занятости без ожидания / __flash_hal__getReadyFast int (*smartWaitms)( __FLASH_WORD wTimems ); // служебная функция для проверки готовности чипа / __flash_smartWaitms } ready; } W25Q_LL_Routines_t; extern const W25Q_LL_Routines_t W25Q_LL_Routines; // __flash_hal__getprotectstate - получение состояния общего бита защиты flash_err_t __flash_hal__getprotectstate( ); // [W25Q WRONG] // служебные функции доступа к памяти драйвера // __flash_protectionregister_t * __flash_internal_getbuffer_protect(); __FLASH_BYTE * __flash_internal_getbuffer_page(); #else #error FLASH HAL: вы подключили заголовочный файл для низкоуровневых операций. #endif #else #error FLASH HAL: подключите сначала заголовочный файл W25Q16JV.h #endif