| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- // Файл с прототипами интерфейсных функций для работы
- // с AT45DB321D на высоком уровне.
- //
- // v 1.3 от 17/04/19
- // Автор: Сычев А.
- #if !defined(AT45DBXXX_IMPORT_H) && !defined(AT45DB321D_API_C)
- // AT45DBXXX_IMPORT_H - предотвращает ошибки при рекурсивном включении пользователем
- // заголовочных файлов этого драйвера внутри AT45DBXXX_import.h
- #undef AT45DB321D_APILEVEL
- #undef AT45DB321D_LOWLEVEL
- #endif
- #include "drivers\flash\lowlevel\AT45DB321D_GLOB.h"
- #include "drivers\flash\common\AT45DB321D_ERR.h"
- #ifndef AT45DB321D_API_H
- #define AT45DB321D_API_H
- // TODO:
- // flash_error_restore(...) // восстановление после некоторых ошибок (см. FLERR_UNEXPECTED_BUSY)
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ ЗАЩИТА СЕКТОРОВ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- #pragma pack( push, 1 )
- typedef enum
- {
- // flash_getprotect
- flash_sector_unprotected = 0, // не защищен
- flash_sector_protected = 1, // защищен
- //--------------------------------
- flash_sector_protect_nomodify = 0, // не модифицировать биты защиты: общий/частный
- flash_sector_protect_modify = 0x7f, // модифицировать общий бит защиты
- flash_sector_protect_pick = 1, // отметить сектор для операции снятия/установки защиты
- }
- flash_api_protect_bits;
- #pragma pack( pop )
- #pragma pack( push, 1 )
- struct flash_sectors_st
- {
- union
- {
- __FLASH_DWORD loprotect; // биты защиты секторов 0-31
-
- __FLASH_BYTE bytes[1]; // для внутреннего пользования
- struct
- {
- __FLASH_DWORD s0 : 1; // на весь сектор 0 выделен один бит. Либо секторы 0a,0b защищены, либо нет.
- __FLASH_DWORD s1 : 1;
- __FLASH_DWORD s2 : 1;
- __FLASH_DWORD s3 : 1;
- __FLASH_DWORD s4 : 1;
- __FLASH_DWORD s5 : 1;
- __FLASH_DWORD s6 : 1;
- __FLASH_DWORD s7 : 1;
- __FLASH_DWORD s8 : 1;
- __FLASH_DWORD s9 : 1;
- __FLASH_DWORD s10 : 1;
- __FLASH_DWORD s11 : 1;
- __FLASH_DWORD s12 : 1;
- __FLASH_DWORD s13 : 1;
- __FLASH_DWORD s14 : 1;
- __FLASH_DWORD s15 : 1;
- __FLASH_DWORD s16 : 1;
- __FLASH_DWORD s17 : 1;
- __FLASH_DWORD s18 : 1;
- __FLASH_DWORD s19 : 1;
- __FLASH_DWORD s20 : 1;
- __FLASH_DWORD s21 : 1;
- __FLASH_DWORD s22 : 1;
- __FLASH_DWORD s23 : 1;
- __FLASH_DWORD s24 : 1;
- __FLASH_DWORD s25 : 1;
- __FLASH_DWORD s26 : 1;
- __FLASH_DWORD s27 : 1;
- __FLASH_DWORD s28 : 1;
- __FLASH_DWORD s29 : 1;
- __FLASH_DWORD s30 : 1;
- __FLASH_DWORD s31 : 1;
- };
- };
- union
- {
- __FLASH_DWORD hiprotect; // биты защиты секторов 32-63
-
- struct
- {
- __FLASH_DWORD s32 : 1;
- __FLASH_DWORD s33 : 1;
- __FLASH_DWORD s34 : 1;
- __FLASH_DWORD s35 : 1;
- __FLASH_DWORD s36 : 1;
- __FLASH_DWORD s37 : 1;
- __FLASH_DWORD s38 : 1;
- __FLASH_DWORD s39 : 1;
- __FLASH_DWORD s40 : 1;
- __FLASH_DWORD s41 : 1;
- __FLASH_DWORD s42 : 1;
- __FLASH_DWORD s43 : 1;
- __FLASH_DWORD s44 : 1;
- __FLASH_DWORD s45 : 1;
- __FLASH_DWORD s46 : 1;
- __FLASH_DWORD s47 : 1;
- __FLASH_DWORD s48 : 1;
- __FLASH_DWORD s49 : 1;
- __FLASH_DWORD s50 : 1;
- __FLASH_DWORD s51 : 1;
- __FLASH_DWORD s52 : 1;
- __FLASH_DWORD s53 : 1;
- __FLASH_DWORD s54 : 1;
- __FLASH_DWORD s55 : 1;
- __FLASH_DWORD s56 : 1;
- __FLASH_DWORD s57 : 1;
- __FLASH_DWORD s58 : 1;
- __FLASH_DWORD s59 : 1;
- __FLASH_DWORD s60 : 1;
- __FLASH_DWORD s61 : 1;
- __FLASH_DWORD s62 : 1;
- __FLASH_DWORD s63 : 1;
- };
- };
- };
- #pragma pack( pop )
- #pragma pack( push, 1 )
- typedef struct
- {
- // @sectors:
- // бит со значением flash_sector_protected означает, что сектор защищен от стирания/записи
- // бит со значением flash_sector_nomodify означает, что сектор не защищен
- struct flash_sectors_st sectors;
- __FLASH_BYTE protection_enabled : 1; // 0 - защита секторов отключена, 1 - включена
- __FLASH_BYTE _reserved : 7;
- }
- flash_api_getprotect_t;
- #pragma pack( pop )
- #pragma pack( push, 1 )
- typedef struct
- {
- // @sectors:
- // бит со значением flash_sector_protect_pick означает, что нужно защищитить сектор от стирания/записи
- // бит со значением flash_sector_nomodify означает, что не нужно менять статус защиты сектора
- struct flash_sectors_st sectors;
- __FLASH_BYTE protection_enabled: 1; // 0 (flash_sector_unprotected) - защита секторов отключена,
- // 1 (flash_sector_protected) - включена
- __FLASH_BYTE protection_modify : 7; // 0b0000000 (flash_sector_protect_nomodify) - не изменять бит защиты,
- // 0b1111111 (flash_sector_protect_modify) - изменить бит защиты
- }
- flash_api_protect_t;
- #pragma pack( pop )
- #pragma pack( push, 1 )
- typedef struct
- {
- // @sectors:
- // бит со значением flash_sector_protect_pick означает, что нужно снять защиту с сектора
- // бит со значением flash_sector_nomodify означает, что не нужно менять статус защиты сектора
- struct flash_sectors_st sectors;
- __FLASH_BYTE protection_enabled: 1; // 0 (flash_sector_unprotected) - защита секторов отключена,
- // 1 (flash_sector_protected) - включена
- __FLASH_BYTE protection_modify : 7; // 0b0000000 (flash_sector_protect_nomodify) - не изменять бит защиты,
- // 0b1111111 (flash_sector_protect_modify) - изменить бит защиты
- }
- flash_api_unprotect_t;
- #pragma pack( pop )
-
- // flash_protect - установить защиту секторов
- // * параметр @content может быть равен NULL
- flash_err_t flash_protect( flash_api_protect_t * content );
-
- // flash_protect - снять защиту секторов
- // * параметр @content может быть равен NULL
- flash_err_t flash_unprotect( flash_api_protect_t * content );
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ ЧТЕНИЕ/ЗАПИСЬ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
-
- typedef __FLASH_DWORD flash_address_t;
- typedef __FLASH_DWORD flash_size_t;
- // режим стирания для flash_erase()
- typedef enum
- {
- fem_byaddress,
- fem_bypage,
- fem_byblock,
- fem_bysector,
- }
- flash_erase_mode_t;
-
- // режим записи для flash_write()
- typedef enum
- {
- fwm_safewrite, // безопасная запись
- fwm_fastwrite, // быстрая запись
- fwm_compatible, // промежуточный режим м/у быстрой и безопасной записью
- }
- flash_write_mode_t;
-
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ ДОПОЛНИТЕЛЬНО №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
-
- typedef enum
- { // ЗАПРОС // РАЗМЕР БУФЕРА // ПОЛУЧИТЬ:
- fsvc_getVendorId, // 2 // ID производителя
- fsvc_getDeviceId, // 2 // ID устройства (__flash_deviceid_t)
- fsvc_getExtInfo, // * // расширенную информацию производителя
- fsvc_getExtInfoLen, // 1 // длинну расширенной информации производителя
- fsvc_getDataCapacity, // 4 // доступная емкость устройства (в байтах)
- fsvc_getFullCapacity, // 4 // полная емкость устройства (в байтах)
- fsvc_getCapacity, // 4 // заявляемая емкость устройства по документации (MBit-s)
- fsvc_getProtect, // 1 // информацию о защите секторов (общий бит защиты 0x00 или 0x01)
- fsvc_getSectorsCount, // 2 // количество секторов
- fsvc_getPagesCount, // 2 // количество страниц
- fsvc_getBlocksCount, // 2 // количество блоков
- fsvc_getPageSize, // 2 // размер страницы
- fsvc_getReadyState, // 1 // готовность устройства
- fsvc_getMinAddress, // 4 // минимально возможный линейный адрес
- fsvc_getMaxAddress, // 4 // максимально возможный линейный адрес
- }
- flash_service_info_t;
-
- typedef struct
- {
- flash_address_t minAddress;
- flash_address_t maxAddress;
- flash_size_t maxSectors;
- flash_size_t sectorSize;
- }
- flash_properties_t;
- extern const flash_properties_t FlashProperties;
- #endif
|