| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- // v 1.0 from 14/10/2020
- // Сычев А.
- #ifndef FLASH_API_PROTECTION_H
- #define FLASH_API_PROTECTION_H
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ ЗАЩИТА СЕКТОРОВ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- #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; // AT45: на весь сектор 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 )
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ ЧТЕНИЕ/ЗАПИСЬ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№ №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- // №№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№№
- 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;
- const char * pChipDescription; // textual flash-chip description
- }
- flash_properties_t;
- // flash_api_descriptor_t
- // Дескриптор API чипа энергонезависимой памяти
- typedef struct
- {
- struct
- {
- // flash_protect - установить защиту секторов
- flash_err_t (*flashProtect)( flash_api_protect_t * content );
- // flash_protect - снять защиту секторов
- flash_err_t (*flashUnprotect)( flash_api_protect_t * content );
- // flash_initialize - инициализация драйвера и API работы с устройством
- flash_err_t (*flashInitialize)( bool detectMode );
- // flash_getready - проверка готовности устройства (со стандартным таймаутом)
- flash_err_t (*flashGetReady)();
- // flash_service - функция получения общих сведений об флеш-памяти.
- flash_err_t (*flashService)( flash_service_info_t si, void * pdata, __FLASH_WORD * pbufsize );
-
- // flash_protect_ex - установить/снять защиту секторов
- flash_err_t (*flashProtectEx)( flash_api_protect_t * content, flash_api_protect_bits mode );
- // flash_getprotect - получить информацию о защищенных секторах.
- flash_err_t (*flashGetProtect)( flash_api_getprotect_t * content );
- // flash_erase - мультирежимное стирание данных
- flash_err_t (*flashErase)( flash_erase_mode_t mode, __FLASH_DWORD start, __FLASH_DWORD count );
- // flash_write - мультирежимная запись данных по адресу
- flash_err_t (*flashWrite)( flash_address_t address, __FLASH_BYTE * pBuffer, flash_address_t size, flash_write_mode_t mode );
- // flash_read - чтение данных по адресу
- flash_err_t (*flashRead)( flash_address_t address, __FLASH_BYTE * pBuffer, flash_address_t size );
- // flash_sleepmode - переход в режим пониженного энергопотребления
- flash_err_t (*flashSleepMode)();
- // flash_wakeup - выход из режима пониженного энергопотребления
- flash_err_t (*flashWakeup)();
- // flash_finalize - деинициализация драйвера
- flash_err_t (*flashFinalize)( bool bHibernate, bool bForce );
- }
- routines;
- const flash_properties_t * flashProperties;
- }
- flash_api_descriptor_t;
- #endif
|