AT45DB321D_API.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. // Файл с прототипами интерфейсных функций для работы
  2. // с AT45DB321D на высоком уровне.
  3. //
  4. // v 1.3 от 17/04/19
  5. // Автор: Сычев А.
  6. #if !defined(AT45DBXXX_IMPORT_H) && !defined(AT45DB321D_API_C)
  7. // AT45DBXXX_IMPORT_H - предотвращает ошибки при рекурсивном включении пользователем
  8. // заголовочных файлов этого драйвера внутри AT45DBXXX_import.h
  9. #undef AT45DB321D_APILEVEL
  10. #undef AT45DB321D_LOWLEVEL
  11. #endif
  12. #include "drivers\flash\lowlevel\AT45DB321D_GLOB.h"
  13. #include "drivers\flash\common\AT45DB321D_ERR.h"
  14. #ifndef AT45DB321D_API_H
  15. #define AT45DB321D_API_H
  16. // TODO:
  17. // flash_error_restore(...) // восстановление после некоторых ошибок (см. FLERR_UNEXPECTED_BUSY)
  18. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  19. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  20. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ ЗАЩИТА СЕКТОРОВ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  21. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  22. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  23. #pragma pack( push, 1 )
  24. typedef enum
  25. {
  26. // flash_getprotect
  27. flash_sector_unprotected = 0, // не защищен
  28. flash_sector_protected = 1, // защищен
  29. //--------------------------------
  30. flash_sector_protect_nomodify = 0, // не модифицировать биты защиты: общий/частный
  31. flash_sector_protect_modify = 0x7f, // модифицировать общий бит защиты
  32. flash_sector_protect_pick = 1, // отметить сектор для операции снятия/установки защиты
  33. }
  34. flash_api_protect_bits;
  35. #pragma pack( pop )
  36. #pragma pack( push, 1 )
  37. struct flash_sectors_st
  38. {
  39. union
  40. {
  41. __FLASH_DWORD loprotect; // биты защиты секторов 0-31
  42. __FLASH_BYTE bytes[1]; // для внутреннего пользования
  43. struct
  44. {
  45. __FLASH_DWORD s0 : 1; // на весь сектор 0 выделен один бит. Либо секторы 0a,0b защищены, либо нет.
  46. __FLASH_DWORD s1 : 1;
  47. __FLASH_DWORD s2 : 1;
  48. __FLASH_DWORD s3 : 1;
  49. __FLASH_DWORD s4 : 1;
  50. __FLASH_DWORD s5 : 1;
  51. __FLASH_DWORD s6 : 1;
  52. __FLASH_DWORD s7 : 1;
  53. __FLASH_DWORD s8 : 1;
  54. __FLASH_DWORD s9 : 1;
  55. __FLASH_DWORD s10 : 1;
  56. __FLASH_DWORD s11 : 1;
  57. __FLASH_DWORD s12 : 1;
  58. __FLASH_DWORD s13 : 1;
  59. __FLASH_DWORD s14 : 1;
  60. __FLASH_DWORD s15 : 1;
  61. __FLASH_DWORD s16 : 1;
  62. __FLASH_DWORD s17 : 1;
  63. __FLASH_DWORD s18 : 1;
  64. __FLASH_DWORD s19 : 1;
  65. __FLASH_DWORD s20 : 1;
  66. __FLASH_DWORD s21 : 1;
  67. __FLASH_DWORD s22 : 1;
  68. __FLASH_DWORD s23 : 1;
  69. __FLASH_DWORD s24 : 1;
  70. __FLASH_DWORD s25 : 1;
  71. __FLASH_DWORD s26 : 1;
  72. __FLASH_DWORD s27 : 1;
  73. __FLASH_DWORD s28 : 1;
  74. __FLASH_DWORD s29 : 1;
  75. __FLASH_DWORD s30 : 1;
  76. __FLASH_DWORD s31 : 1;
  77. };
  78. };
  79. union
  80. {
  81. __FLASH_DWORD hiprotect; // биты защиты секторов 32-63
  82. struct
  83. {
  84. __FLASH_DWORD s32 : 1;
  85. __FLASH_DWORD s33 : 1;
  86. __FLASH_DWORD s34 : 1;
  87. __FLASH_DWORD s35 : 1;
  88. __FLASH_DWORD s36 : 1;
  89. __FLASH_DWORD s37 : 1;
  90. __FLASH_DWORD s38 : 1;
  91. __FLASH_DWORD s39 : 1;
  92. __FLASH_DWORD s40 : 1;
  93. __FLASH_DWORD s41 : 1;
  94. __FLASH_DWORD s42 : 1;
  95. __FLASH_DWORD s43 : 1;
  96. __FLASH_DWORD s44 : 1;
  97. __FLASH_DWORD s45 : 1;
  98. __FLASH_DWORD s46 : 1;
  99. __FLASH_DWORD s47 : 1;
  100. __FLASH_DWORD s48 : 1;
  101. __FLASH_DWORD s49 : 1;
  102. __FLASH_DWORD s50 : 1;
  103. __FLASH_DWORD s51 : 1;
  104. __FLASH_DWORD s52 : 1;
  105. __FLASH_DWORD s53 : 1;
  106. __FLASH_DWORD s54 : 1;
  107. __FLASH_DWORD s55 : 1;
  108. __FLASH_DWORD s56 : 1;
  109. __FLASH_DWORD s57 : 1;
  110. __FLASH_DWORD s58 : 1;
  111. __FLASH_DWORD s59 : 1;
  112. __FLASH_DWORD s60 : 1;
  113. __FLASH_DWORD s61 : 1;
  114. __FLASH_DWORD s62 : 1;
  115. __FLASH_DWORD s63 : 1;
  116. };
  117. };
  118. };
  119. #pragma pack( pop )
  120. #pragma pack( push, 1 )
  121. typedef struct
  122. {
  123. // @sectors:
  124. // бит со значением flash_sector_protected означает, что сектор защищен от стирания/записи
  125. // бит со значением flash_sector_nomodify означает, что сектор не защищен
  126. struct flash_sectors_st sectors;
  127. __FLASH_BYTE protection_enabled : 1; // 0 - защита секторов отключена, 1 - включена
  128. __FLASH_BYTE _reserved : 7;
  129. }
  130. flash_api_getprotect_t;
  131. #pragma pack( pop )
  132. #pragma pack( push, 1 )
  133. typedef struct
  134. {
  135. // @sectors:
  136. // бит со значением flash_sector_protect_pick означает, что нужно защищитить сектор от стирания/записи
  137. // бит со значением flash_sector_nomodify означает, что не нужно менять статус защиты сектора
  138. struct flash_sectors_st sectors;
  139. __FLASH_BYTE protection_enabled: 1; // 0 (flash_sector_unprotected) - защита секторов отключена,
  140. // 1 (flash_sector_protected) - включена
  141. __FLASH_BYTE protection_modify : 7; // 0b0000000 (flash_sector_protect_nomodify) - не изменять бит защиты,
  142. // 0b1111111 (flash_sector_protect_modify) - изменить бит защиты
  143. }
  144. flash_api_protect_t;
  145. #pragma pack( pop )
  146. #pragma pack( push, 1 )
  147. typedef struct
  148. {
  149. // @sectors:
  150. // бит со значением flash_sector_protect_pick означает, что нужно снять защиту с сектора
  151. // бит со значением flash_sector_nomodify означает, что не нужно менять статус защиты сектора
  152. struct flash_sectors_st sectors;
  153. __FLASH_BYTE protection_enabled: 1; // 0 (flash_sector_unprotected) - защита секторов отключена,
  154. // 1 (flash_sector_protected) - включена
  155. __FLASH_BYTE protection_modify : 7; // 0b0000000 (flash_sector_protect_nomodify) - не изменять бит защиты,
  156. // 0b1111111 (flash_sector_protect_modify) - изменить бит защиты
  157. }
  158. flash_api_unprotect_t;
  159. #pragma pack( pop )
  160. // flash_protect - установить защиту секторов
  161. // * параметр @content может быть равен NULL
  162. flash_err_t flash_protect( flash_api_protect_t * content );
  163. // flash_protect - снять защиту секторов
  164. // * параметр @content может быть равен NULL
  165. flash_err_t flash_unprotect( flash_api_protect_t * content );
  166. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  167. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  168. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ ЧТЕНИЕ/ЗАПИСЬ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  169. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  170. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  171. typedef __FLASH_DWORD flash_address_t;
  172. typedef __FLASH_DWORD flash_size_t;
  173. // режим стирания для flash_erase()
  174. typedef enum
  175. {
  176. fem_byaddress,
  177. fem_bypage,
  178. fem_byblock,
  179. fem_bysector,
  180. }
  181. flash_erase_mode_t;
  182. // режим записи для flash_write()
  183. typedef enum
  184. {
  185. fwm_safewrite, // безопасная запись
  186. fwm_fastwrite, // быстрая запись
  187. fwm_compatible, // промежуточный режим м/у быстрой и безопасной записью
  188. }
  189. flash_write_mode_t;
  190. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  191. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  192. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ ДОПОЛНИТЕЛЬНО №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  193. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  194. // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
  195. typedef enum
  196. { // ЗАПРОС // РАЗМЕР БУФЕРА // ПОЛУЧИТЬ:
  197. fsvc_getVendorId, // 2 // ID производителя
  198. fsvc_getDeviceId, // 2 // ID устройства (__flash_deviceid_t)
  199. fsvc_getExtInfo, // * // расширенную информацию производителя
  200. fsvc_getExtInfoLen, // 1 // длинну расширенной информации производителя
  201. fsvc_getDataCapacity, // 4 // доступная емкость устройства (в байтах)
  202. fsvc_getFullCapacity, // 4 // полная емкость устройства (в байтах)
  203. fsvc_getCapacity, // 4 // заявляемая емкость устройства по документации (MBit-s)
  204. fsvc_getProtect, // 1 // информацию о защите секторов (общий бит защиты 0x00 или 0x01)
  205. fsvc_getSectorsCount, // 2 // количество секторов
  206. fsvc_getPagesCount, // 2 // количество страниц
  207. fsvc_getBlocksCount, // 2 // количество блоков
  208. fsvc_getPageSize, // 2 // размер страницы
  209. fsvc_getReadyState, // 1 // готовность устройства
  210. fsvc_getMinAddress, // 4 // минимально возможный линейный адрес
  211. fsvc_getMaxAddress, // 4 // максимально возможный линейный адрес
  212. }
  213. flash_service_info_t;
  214. typedef struct
  215. {
  216. flash_address_t minAddress;
  217. flash_address_t maxAddress;
  218. flash_size_t maxSectors;
  219. flash_size_t sectorSize;
  220. }
  221. flash_properties_t;
  222. extern const flash_properties_t FlashProperties;
  223. #endif