// Файл с прототипами низкоуровневых комманд для AT45DB161E. // v 1.12 от 21/07/15 // v 1.13 от 14/10/19 // Автор: Сычев А. #ifdef AT45DB161E_H #if defined(AT45DB161E_LOWLEVEL) || defined(AT45DB161E_APILEVEL) // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ // №№№№№№№№№№№№№№№№№№№№№№ НИЗКОУРОВНЕВЫЕ НЕБЕЗОПАСНЫЕ ФУНКЦИИ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ // // подробнее см. AT45DBXXX_LL.c // struct AT45_LL_Routines_st { // __flash_hal__statusread - чтение регистра статуса void (*statusread)( __flash_status_t * pcReadRegister ); // буфер для чтения статус-регистра // __flash_hal__page_read - чтение одной страницы void (*page_read)( __FLASH_WORD wPageNum, // номер страницы для чтения __FLASH_WORD wPageOfs, // адрес начала чтения в странице __FLASH_BYTE * pDataRead, // указатель на буфер-приемник данных __FLASH_WORD wCntToRead ); // количество данных на чтение // __flash_hal__array_read - последовательное чтение (массив) void (*array_read) ( __FLASH_WORD wPageNum, // номер начальной страницы для чтения __FLASH_WORD wPageOfs, // адрес начала чтения в начальной странице __FLASH_BYTE * pDataRead, // указатель на буфер-приемник данных __FLASH_WORD wCntToRead ); // количество данных на чтение // __flash_hal__use512page - сконфигурировать чип на работу со стандартной страницей 512 байт void (*use512page)(); // __flash_hal__buffer1_read - чтение буфера 1 (up to 66 MHz) void (*buffer1_read)( __FLASH_WORD wBuffOfs, // адрес начала чтения в буфере __FLASH_BYTE * pDataRead, // указатель на буфер-приемник данных __FLASH_WORD wCntToRead ); // количество данных на чтение // __flash_hal__buffer2_read - чтение буфера 2 (up to 66 MHz) void (*buffer2_read)( __FLASH_WORD wBuffOfs, // адрес начала чтения в буфере __FLASH_BYTE * pDataRead, // указатель на буфер-приемник данных __FLASH_WORD wCntToRead ); // количество данных на чтение // __flash_hal__buffer1_read_slow - чтение буфера 1 (up to 33 MHz) void (*buffer1_read_slow)( __FLASH_WORD wBuffOfs, // адрес начала чтения в буфере __FLASH_BYTE * pDataRead, // указатель на буфер-приемник данных __FLASH_WORD wCntToRead ); // количество данных на чтение // __flash_hal__buffer2_read_slow - чтение буфера 2 (up to 33 MHz) void (*buffer2_read_slow)( __FLASH_WORD wBuffOfs, // адрес начала чтения в буфере __FLASH_BYTE * pDataRead, // указатель на буфер-приемник данных __FLASH_WORD wCntToRead ); // количество данных на чтение // __flash_hal__buffer1_write - запись буфера 1 void (*buffer1_write)( __FLASH_WORD wBuffOfs, // адрес начала записи в буфере-приемнике (чип) __FLASH_BYTE * pDataWrite, // указатель на буфер-источник данных __FLASH_WORD wCntToWrite ); // количество данных на запись // __flash_hal__buffer2_write - запись буфера 2 void (*buffer2_write)( __FLASH_WORD wBuffOfs, // адрес начала записи в буфере-приемнике (чип) __FLASH_BYTE * pDataWrite, // указатель на буфер-источник данных __FLASH_WORD wCntToWrite ); // количество данных на запись // __flash_hal__buffer1_program - программирование буфера 1 в страницу со стиранием void (*buffer1_program)( __FLASH_WORD wPageNum ); // номер страницы, куда произвести программирование // __flash_hal__buffer2_program - программирование буфера 2 в страницу со стиранием void (*buffer2_program)( __FLASH_WORD wPageNum ); // номер страницы, куда произвести программирование // __flash_hal__buffer1_program_wo_erase - программирование буфера 1 в страницу без стирания void (*buffer1_program_wo_erase)( __FLASH_WORD wPageNum ); // номер страницы, куда произвести программирование // __flash_hal__buffer2_program_wo_erase - программирование буфера 2 в страницу без стирания void (*buffer2_program_wo_erase)( __FLASH_WORD wPageNum ); // номер страницы, куда произвести программирование // __flash_hal__page_erase - стирание страницы void (*page_erase)( __FLASH_WORD wPageNum ); // номер стираемой страницы // __flash_hal__block_erase - стирание блока void (*block_erase)( __FLASH_WORD wBlockNum ); // номер стираемого блока // __flash_hal__sector0_erase - стирание секторов 0a и 0b void (*sector0_erase)( __FLASH_WORD wSubSector ); // номер подсектора 0 или 1 // __flash_hal__sector_erase - стирание секторов с номером 1 и выше void (*sector_erase)( __FLASH_WORD wSector ); // номер сектора 1-63 // __flash_hal__page_write_via_buffer1 - запись страницы через буфер 1 void (*page_write_via_buffer1)( __FLASH_WORD wBuffOfs, // адрес начала записи в буфере-приемнике (чип) __FLASH_BYTE * pDataWrite, // указатель на буфер-источник данных __FLASH_WORD wCntToWrite, // количество данных на запись __FLASH_WORD wPageNum ); // номер страницы, куда произвести программирование // __flash_hal__page_write_via_buffer2 - запись страницы через буфер 2 void (*page_write_via_buffer2)( __FLASH_WORD wBuffOfs, // адрес начала записи в буфере-приемнике (чип) __FLASH_BYTE * pDataWrite, // указатель на буфер-источник данных __FLASH_WORD wCntToWrite, // количество данных на запись __FLASH_WORD wPageNum ); // номер страницы, куда произвести программирование // __flash_hal__pagetobuffer1 - загрузка содержимого страницы в буфер 1 void (*pagetobuffer1)( __FLASH_WORD wPageNum ); // номер страницы для загрузки // __flash_hal__pagetobuffer2 - загрузка содержимого страницы в буфер 2 void (*pagetobuffer2)( __FLASH_WORD wPageNum ); // номер страницы для загрузки // __flash_hal__pagetobuffer1 - сравнение содержимого страницы с буфером 1 void (*buffer1_compare)( __FLASH_WORD wPageNum ); // номер страницы для сравнения // __flash_hal__pagetobuffer2 - сравнение содержимого страницы с буфером 2 void (*buffer2_compare)( __FLASH_WORD wPageNum ); // номер страницы для сравнения // __flash_hal__autopagerewrite - обновление страницы через буфер 1 void (*autopagerewrite1)( __FLASH_WORD wPageNum ); // номер обновляемой страницы // __flash_hal__autopagerewrite - обновление страницы через буфер 2 void (*autopagerewrite2)( __FLASH_WORD wPageNum ); // номер обновляемой страницы // __flash_hal__sleepmode - переход в режим пониженного энергопотребления void (*sleepmode)(); // __flash_hal__wakeup - выход из режима пониженного энергопотребления void (*wakeup)(); // __flash_hal__manufactureridread - чтение идентификатора производителя __FLASH_DWORD (*manufactureridread)( __flash_id_t * pManufacturerID ); // необязательный параметр-буфер для приема расширенной информации // __flash_hal__writeprotect_enable - включить программную защиту от записи/стирания void (*writeprotect_enable)(); // __flash_hal__writeprotect_disable - выключить программную защиту от записи/стирания void (*writeprotect_disable)(); // __flash_hal__protectregister_erase - стирает регистр защиты, помечая ВСЕ сектора как защищенные // # если включена программная защита от записи, все операции стирания/записи для всех секторов будут заблокированы до ее отключения void (*protectregister_erase)(); // __flash_hal__protectregister_write - записывает регистр защиты void (*protectregister_write)( __flash_protectionregister_t * contents );// содержимое регистра защиты для записи // __flash_hal__protectregister_read - прочитывает регистр защиты void (*protectregister_read)( __flash_protectionregister_t * contents ); // буфер-приемник содержимого регистра защиты // __flash_hal__sectorlockdown - постоянная блокировка сектора от записи/стирания void (*sectorlockdown)( __FLASH_DWORD address ); // адрес внутри блокируемого сектора // __flash_hal__lockdownregister_read - прочитывает регистр блокировки void (*lockdownregister_read)( __flash_lockdownregister_t * contents ); // буфер-приемник содержимого регистра блокировки // __flash_hal__securityregister_write - записывает регистр безопасности // * записывает только ПОЛЬЗОВАТЕЛЬСКУЮ часть // # РЕГИСТР БЕЗОПАСНОСТИ МОЖЕТ БЫТЬ ЗАПИСАН ТОЛЬКО ОДИН РАЗ! void (*securityregister_write)( __flash_usersecurityregister_t * contents ); // содержимое регистра безопасности (часть, доступная для записи пользователю) // __flash_hal__securityregister_read - прочитывает регистр безопасности void (*securityregister_read)( __flash_securityregister_t * contents ); // буфер-приемник содержимого регистра блокировки // __flash_hal__securityregister_validate - прочитывает регистр безопасности и выполняет // проверку осмысленности прочитанного заводского идентификатора. bool (*securityregister_validate)( __flash_securityregister_t * contents ); // буфер-приемник содержимого регистра блокировки // __flash_hal__getprotectstate - получение состояния общего бита защиты flash_err_t (*getprotectstate)( ); // __flash_hal__getreadyfast - проверка занятости без ожидания flash_err_t (*getreadyfast)( ); // __flash_hal__getcompareresult - проверка результата сравнения (бит COMP / bMismatch) flash_err_t (*getcompareresult)( ); // __flash_hal__startupDetect - Низкоуровневое определение наличия чипа (доступности) flash_err_t (*startupDetect)(); // __flash_hal__initialize - Низкоуровневая инициализация флешпамяти ); flash_err_t (*initialize)(); // __flash_hal__dirtyDetect - Низкоуровневое определение наличия чипа (доступности) flash_err_t (*dirtyDetect)(); // служебные функции доступа к памяти драйвера // __flash_internal_getbuffer_protect __flash_protectionregister_t * (*internal_getbuffer_protect)(); // служебные функции доступа к памяти драйвера // __flash_internal_getbuffer_page __FLASH_BYTE * (*internal_getbuffer_page)(); // служебная функция для проверки готовности чипа int (*smart_waitms)( __FLASH_WORD wTimems ); #if AT45DBXXX_POWER_MANAGEMENT > 0 // __flash_hal__power_on - реализует управление питанием микросхемы памяти (подает питание) void (*power_on)(); // __flash_hal__power_off - реализует управление питанием микросхемы памяти (снимает питание) void (*power_off)(); // __flash_hal__power_pulse - реализует управление питанием микросхемы - формирует импульс перезагрузки void (*power_pulse)( __FLASH_WORD nCooldownTime_ms, __FLASH_WORD nStartupTime_ms ); #endif #if AT45DBXXX_RESET_MANAGEMENT > 0 // __flash_hal__reset_assert - реализует управление сигналом сброса микросхемы памяти (устанавливает сигнал сброса) void (*reset_assert)(); // __flash_hal__reset_release - реализует управление сигналом сброса микросхемы памяти (снимает сигнал сброса) void (*reset_release)(); // __flash_hal__reset_pulse - реализует управление сигналом сброса микросхемы памяти (подает законченный импульс сброса) void (*reset_pulse)(); #endif // __flash_hal__finalize_prepare - Низкоуровневая функция для подготовки флешпамяти к деинициализации драйвера flash_err_t (*finalize_prepare)(); }; typedef struct AT45_LL_Routines_st AT45_LL_Routines_t; extern const AT45_LL_Routines_t AT45_LL_Routines; #else #error FLASH HAL: вы подключили заголовочный файл для низкоуровневых операций. #endif #else #error FLASH HAL: подключите сначала заголовочный файл AT45DB161E.h #endif