AT45DB161E_LL_func.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. // Файл с прототипами низкоуровневых комманд для AT45DB161E.
  2. // v 1.12 от 21/07/15
  3. // v 1.13 от 14/10/19
  4. // Автор: Сычев А.
  5. #ifdef AT45DB161E_H
  6. #if defined(AT45DB161E_LOWLEVEL) || defined(AT45DB161E_APILEVEL)
  7. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  8. // №№№№№№№№№№№№№№№№№№№№№№ НИЗКОУРОВНЕВЫЕ НЕБЕЗОПАСНЫЕ ФУНКЦИИ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  9. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  10. //
  11. // подробнее см. AT45DBXXX_LL.c
  12. //
  13. struct AT45_LL_Routines_st
  14. {
  15. // __flash_hal__statusread - чтение регистра статуса
  16. void (*statusread)( __flash_status_t * pcReadRegister ); // буфер для чтения статус-регистра
  17. // __flash_hal__page_read - чтение одной страницы
  18. void (*page_read)( __FLASH_WORD wPageNum, // номер страницы для чтения
  19. __FLASH_WORD wPageOfs, // адрес начала чтения в странице
  20. __FLASH_BYTE * pDataRead, // указатель на буфер-приемник данных
  21. __FLASH_WORD wCntToRead ); // количество данных на чтение
  22. // __flash_hal__array_read - последовательное чтение (массив)
  23. void (*array_read) ( __FLASH_WORD wPageNum, // номер начальной страницы для чтения
  24. __FLASH_WORD wPageOfs, // адрес начала чтения в начальной странице
  25. __FLASH_BYTE * pDataRead, // указатель на буфер-приемник данных
  26. __FLASH_WORD wCntToRead ); // количество данных на чтение
  27. // __flash_hal__use512page - сконфигурировать чип на работу со стандартной страницей 512 байт
  28. void (*use512page)();
  29. // __flash_hal__buffer1_read - чтение буфера 1 (up to 66 MHz)
  30. void (*buffer1_read)( __FLASH_WORD wBuffOfs, // адрес начала чтения в буфере
  31. __FLASH_BYTE * pDataRead, // указатель на буфер-приемник данных
  32. __FLASH_WORD wCntToRead ); // количество данных на чтение
  33. // __flash_hal__buffer2_read - чтение буфера 2 (up to 66 MHz)
  34. void (*buffer2_read)( __FLASH_WORD wBuffOfs, // адрес начала чтения в буфере
  35. __FLASH_BYTE * pDataRead, // указатель на буфер-приемник данных
  36. __FLASH_WORD wCntToRead ); // количество данных на чтение
  37. // __flash_hal__buffer1_read_slow - чтение буфера 1 (up to 33 MHz)
  38. void (*buffer1_read_slow)( __FLASH_WORD wBuffOfs, // адрес начала чтения в буфере
  39. __FLASH_BYTE * pDataRead, // указатель на буфер-приемник данных
  40. __FLASH_WORD wCntToRead ); // количество данных на чтение
  41. // __flash_hal__buffer2_read_slow - чтение буфера 2 (up to 33 MHz)
  42. void (*buffer2_read_slow)( __FLASH_WORD wBuffOfs, // адрес начала чтения в буфере
  43. __FLASH_BYTE * pDataRead, // указатель на буфер-приемник данных
  44. __FLASH_WORD wCntToRead ); // количество данных на чтение
  45. // __flash_hal__buffer1_write - запись буфера 1
  46. void (*buffer1_write)( __FLASH_WORD wBuffOfs, // адрес начала записи в буфере-приемнике (чип)
  47. __FLASH_BYTE * pDataWrite, // указатель на буфер-источник данных
  48. __FLASH_WORD wCntToWrite ); // количество данных на запись
  49. // __flash_hal__buffer2_write - запись буфера 2
  50. void (*buffer2_write)( __FLASH_WORD wBuffOfs, // адрес начала записи в буфере-приемнике (чип)
  51. __FLASH_BYTE * pDataWrite, // указатель на буфер-источник данных
  52. __FLASH_WORD wCntToWrite ); // количество данных на запись
  53. // __flash_hal__buffer1_program - программирование буфера 1 в страницу со стиранием
  54. void (*buffer1_program)( __FLASH_WORD wPageNum ); // номер страницы, куда произвести программирование
  55. // __flash_hal__buffer2_program - программирование буфера 2 в страницу со стиранием
  56. void (*buffer2_program)( __FLASH_WORD wPageNum ); // номер страницы, куда произвести программирование
  57. // __flash_hal__buffer1_program_wo_erase - программирование буфера 1 в страницу без стирания
  58. void (*buffer1_program_wo_erase)( __FLASH_WORD wPageNum ); // номер страницы, куда произвести программирование
  59. // __flash_hal__buffer2_program_wo_erase - программирование буфера 2 в страницу без стирания
  60. void (*buffer2_program_wo_erase)( __FLASH_WORD wPageNum ); // номер страницы, куда произвести программирование
  61. // __flash_hal__page_erase - стирание страницы
  62. void (*page_erase)( __FLASH_WORD wPageNum ); // номер стираемой страницы
  63. // __flash_hal__block_erase - стирание блока
  64. void (*block_erase)( __FLASH_WORD wBlockNum ); // номер стираемого блока
  65. // __flash_hal__sector0_erase - стирание секторов 0a и 0b
  66. void (*sector0_erase)( __FLASH_WORD wSubSector ); // номер подсектора 0 или 1
  67. // __flash_hal__sector_erase - стирание секторов с номером 1 и выше
  68. void (*sector_erase)( __FLASH_WORD wSector ); // номер сектора 1-63
  69. // __flash_hal__page_write_via_buffer1 - запись страницы через буфер 1
  70. void (*page_write_via_buffer1)( __FLASH_WORD wBuffOfs, // адрес начала записи в буфере-приемнике (чип)
  71. __FLASH_BYTE * pDataWrite, // указатель на буфер-источник данных
  72. __FLASH_WORD wCntToWrite, // количество данных на запись
  73. __FLASH_WORD wPageNum ); // номер страницы, куда произвести программирование
  74. // __flash_hal__page_write_via_buffer2 - запись страницы через буфер 2
  75. void (*page_write_via_buffer2)( __FLASH_WORD wBuffOfs, // адрес начала записи в буфере-приемнике (чип)
  76. __FLASH_BYTE * pDataWrite, // указатель на буфер-источник данных
  77. __FLASH_WORD wCntToWrite, // количество данных на запись
  78. __FLASH_WORD wPageNum ); // номер страницы, куда произвести программирование
  79. // __flash_hal__pagetobuffer1 - загрузка содержимого страницы в буфер 1
  80. void (*pagetobuffer1)( __FLASH_WORD wPageNum ); // номер страницы для загрузки
  81. // __flash_hal__pagetobuffer2 - загрузка содержимого страницы в буфер 2
  82. void (*pagetobuffer2)( __FLASH_WORD wPageNum ); // номер страницы для загрузки
  83. // __flash_hal__pagetobuffer1 - сравнение содержимого страницы с буфером 1
  84. void (*buffer1_compare)( __FLASH_WORD wPageNum ); // номер страницы для сравнения
  85. // __flash_hal__pagetobuffer2 - сравнение содержимого страницы с буфером 2
  86. void (*buffer2_compare)( __FLASH_WORD wPageNum ); // номер страницы для сравнения
  87. // __flash_hal__autopagerewrite - обновление страницы через буфер 1
  88. void (*autopagerewrite1)( __FLASH_WORD wPageNum ); // номер обновляемой страницы
  89. // __flash_hal__autopagerewrite - обновление страницы через буфер 2
  90. void (*autopagerewrite2)( __FLASH_WORD wPageNum ); // номер обновляемой страницы
  91. // __flash_hal__sleepmode - переход в режим пониженного энергопотребления
  92. void (*sleepmode)();
  93. // __flash_hal__wakeup - выход из режима пониженного энергопотребления
  94. void (*wakeup)();
  95. // __flash_hal__manufactureridread - чтение идентификатора производителя
  96. __FLASH_DWORD (*manufactureridread)( __flash_id_t * pManufacturerID ); // необязательный параметр-буфер для приема расширенной информации
  97. // __flash_hal__writeprotect_enable - включить программную защиту от записи/стирания
  98. void (*writeprotect_enable)();
  99. // __flash_hal__writeprotect_disable - выключить программную защиту от записи/стирания
  100. void (*writeprotect_disable)();
  101. // __flash_hal__protectregister_erase - стирает регистр защиты, помечая ВСЕ сектора как защищенные
  102. // # если включена программная защита от записи, все операции стирания/записи для всех секторов будут заблокированы до ее отключения
  103. void (*protectregister_erase)();
  104. // __flash_hal__protectregister_write - записывает регистр защиты
  105. void (*protectregister_write)( __flash_protectionregister_t * contents );// содержимое регистра защиты для записи
  106. // __flash_hal__protectregister_read - прочитывает регистр защиты
  107. void (*protectregister_read)( __flash_protectionregister_t * contents ); // буфер-приемник содержимого регистра защиты
  108. // __flash_hal__sectorlockdown - постоянная блокировка сектора от записи/стирания
  109. void (*sectorlockdown)( __FLASH_DWORD address ); // адрес внутри блокируемого сектора
  110. // __flash_hal__lockdownregister_read - прочитывает регистр блокировки
  111. void (*lockdownregister_read)( __flash_lockdownregister_t * contents ); // буфер-приемник содержимого регистра блокировки
  112. // __flash_hal__securityregister_write - записывает регистр безопасности
  113. // * записывает только ПОЛЬЗОВАТЕЛЬСКУЮ часть
  114. // # РЕГИСТР БЕЗОПАСНОСТИ МОЖЕТ БЫТЬ ЗАПИСАН ТОЛЬКО ОДИН РАЗ!
  115. void (*securityregister_write)( __flash_usersecurityregister_t * contents ); // содержимое регистра безопасности (часть, доступная для записи пользователю)
  116. // __flash_hal__securityregister_read - прочитывает регистр безопасности
  117. void (*securityregister_read)( __flash_securityregister_t * contents ); // буфер-приемник содержимого регистра блокировки
  118. // __flash_hal__securityregister_validate - прочитывает регистр безопасности и выполняет
  119. // проверку осмысленности прочитанного заводского идентификатора.
  120. bool (*securityregister_validate)( __flash_securityregister_t * contents ); // буфер-приемник содержимого регистра блокировки
  121. // __flash_hal__getprotectstate - получение состояния общего бита защиты
  122. flash_err_t (*getprotectstate)( );
  123. // __flash_hal__getreadyfast - проверка занятости без ожидания
  124. flash_err_t (*getreadyfast)( );
  125. // __flash_hal__getcompareresult - проверка результата сравнения (бит COMP / bMismatch)
  126. flash_err_t (*getcompareresult)( );
  127. // __flash_hal__startupDetect - Низкоуровневое определение наличия чипа (доступности)
  128. flash_err_t (*startupDetect)();
  129. // __flash_hal__initialize - Низкоуровневая инициализация флешпамяти );
  130. flash_err_t (*initialize)();
  131. // __flash_hal__dirtyDetect - Низкоуровневое определение наличия чипа (доступности)
  132. flash_err_t (*dirtyDetect)();
  133. // служебные функции доступа к памяти драйвера
  134. // __flash_internal_getbuffer_protect
  135. __flash_protectionregister_t * (*internal_getbuffer_protect)();
  136. // служебные функции доступа к памяти драйвера
  137. // __flash_internal_getbuffer_page
  138. __FLASH_BYTE * (*internal_getbuffer_page)();
  139. // служебная функция для проверки готовности чипа
  140. int (*smart_waitms)( __FLASH_WORD wTimems );
  141. #if AT45DBXXX_POWER_MANAGEMENT > 0
  142. // __flash_hal__power_on - реализует управление питанием микросхемы памяти (подает питание)
  143. void (*power_on)();
  144. // __flash_hal__power_off - реализует управление питанием микросхемы памяти (снимает питание)
  145. void (*power_off)();
  146. // __flash_hal__power_pulse - реализует управление питанием микросхемы - формирует импульс перезагрузки
  147. void (*power_pulse)( __FLASH_WORD nCooldownTime_ms, __FLASH_WORD nStartupTime_ms );
  148. #endif
  149. #if AT45DBXXX_RESET_MANAGEMENT > 0
  150. // __flash_hal__reset_assert - реализует управление сигналом сброса микросхемы памяти (устанавливает сигнал сброса)
  151. void (*reset_assert)();
  152. // __flash_hal__reset_release - реализует управление сигналом сброса микросхемы памяти (снимает сигнал сброса)
  153. void (*reset_release)();
  154. // __flash_hal__reset_pulse - реализует управление сигналом сброса микросхемы памяти (подает законченный импульс сброса)
  155. void (*reset_pulse)();
  156. #endif
  157. // __flash_hal__finalize_prepare - Низкоуровневая функция для подготовки флешпамяти к деинициализации драйвера
  158. flash_err_t (*finalize_prepare)();
  159. };
  160. typedef struct AT45_LL_Routines_st AT45_LL_Routines_t;
  161. extern const AT45_LL_Routines_t AT45_LL_Routines;
  162. #else
  163. #error FLASH HAL: вы подключили заголовочный файл для низкоуровневых операций.
  164. #endif
  165. #else
  166. #error FLASH HAL: подключите сначала заголовочный файл AT45DB161E.h
  167. #endif