// Файл с определениями форматов пакетов низкоуровневых коммандами для AT45DB161E. // v 1.0 от 16/07/15 // Автор: Сычев А. #ifndef AT45DB161E_LL_H #define AT45DB161E_LL_H #if (!defined(AT45DB161E_LOWLEVEL) && !defined(AT45DB161E_APILEVEL)) #error FLASH HAL: вы подключили заголовочный файл для низкоуровневых операций. #endif #if (defined(AT45DB161E_LOWLEVEL) || defined(AT45DB161E_APILEVEL)) #include "drivers\flash\base\flash_api_types.h" #include "drivers\flash\at45\lowlevel\AT45DB161E_GLOB.h" // определения для AT45DB161E __flash_protectionregister_t * __flash_internal_getbuffer_protect(); //__FLASH_BYTE * __flash_internal_getbuffer_page(); #endif #ifdef AT45DB161E_LOWLEVEL //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_DWORD opcode : 8; // команда ЧТЕНИЕ СТРАНИЦЫ #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD page : 13; // номер страницы #ifdef AT45DB161E_PRM512 __FLASH_DWORD offset : 9; // смещение в странице (режим 512) #else __FLASH_DWORD offset : 10; // смещение в странице (режим 528) #endif __FLASH_DWORD __reserved2; // обязательные don't care bytes } __flash_packet_pageread_direct_t; typedef struct { __FLASH_DWORD __reserved2; // обязательные don't care bytes #ifdef AT45DB161E_PRM512 __FLASH_DWORD offset : 9; // смещение в странице (режим 512) #else __FLASH_DWORD offset : 10; // смещение в странице (режим 528) #endif __FLASH_DWORD page : 13; // номер страницы #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD opcode : 8; // команда ЧТЕНИЕ СТРАНИЦЫ } __flash_packet_pageread_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #ifdef AT45DB161E_PRM512 #pragma pack( push, 1 ) typedef struct { __FLASH_DWORD opcode; // команда ПРОГРАММИРОВАНИЕ КОНФИГУРАЦИОННОГО РЕГИСТРА } __flash_packet_pagecnfg_t; #pragma pack( pop ) #endif //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #ifndef AT45DB161E_EMU512 #pragma pack( push, 1 ) typedef struct { __FLASH_DWORD __reserved2; // обязательные don't care bytes #ifdef AT45DB161E_PRM512 __FLASH_DWORD offset : 9; // смещение в странице (режим 512) #else __FLASH_DWORD offset : 10; // смещение в странице (режим 528) #endif __FLASH_DWORD page : 13; // номер страницы #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD opcode : 8; // команда ПОСЛЕДОВАТЕЛЬНОЕ ЧТЕНИЕ } __flash_packet_arrayread_t; typedef struct { __FLASH_DWORD opcode : 8; // команда ПОСЛЕДОВАТЕЛЬНОЕ ЧТЕНИЕ #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD page : 13; // номер страницы #ifdef AT45DB161E_PRM512 __FLASH_DWORD offset : 9; // смещение в странице (режим 512) #else __FLASH_DWORD offset : 10; // смещение в странице (режим 528) #endif __FLASH_DWORD __reserved2; // обязательные don't care bytes } __flash_packet_arrayread_direct_t; #pragma pack( pop ) #endif //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { #ifdef AT45DB161E_PRM512 __FLASH_DWORD offset : 9; // смещение в странице (режим 512) #else __FLASH_DWORD offset : 10; // смещение в странице (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 15; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 14; // don't care bit (режим 528) #endif __FLASH_DWORD opcode : 8; // команда ЧТЕНИЕ БУФЕРА } __flash_packet_bufferread_slow_t; // up to 33MHz typedef struct { __FLASH_DWORD opcode : 8; // команда ЧТЕНИЕ БУФЕРА #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 15; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 14; // don't care bit (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD offset : 9; // смещение в странице (режим 512) #else __FLASH_DWORD offset : 10; // смещение в странице (режим 528) #endif } __flash_packet_bufferread_slow_direct_t; // up to 33MHz #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_BYTE __reserved2; // обязательный don't care byte #ifdef AT45DB161E_PRM512 __FLASH_DWORD offset : 9; // смещение в странице (режим 512) #else __FLASH_DWORD offset : 10; // смещение в странице (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 15; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 14; // don't care bit (режим 528) #endif __FLASH_DWORD opcode : 8; // команда ЧТЕНИЕ БУФЕРА } __flash_packet_bufferread_fast_t; // up to 66MHz typedef struct { __FLASH_DWORD opcode : 8; // команда ЧТЕНИЕ БУФЕРА #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 15; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 14; // don't care bit (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD offset : 9; // смещение в странице (режим 512) #else __FLASH_DWORD offset : 10; // смещение в странице (режим 528) #endif __FLASH_BYTE __reserved2; // обязательный don't care byte } __flash_packet_bufferread_fast_direct_t; // up to 66MHz #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { #ifdef AT45DB161E_PRM512 __FLASH_DWORD offset : 9; // смещение в странице (режим 512) #else __FLASH_DWORD offset : 10; // смещение в странице (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 15; // don't care bits (режим 512) #else __FLASH_DWORD __reserved : 14; // don't care bits (режим 528) #endif __FLASH_DWORD opcode : 8; // команда ЗАПИСЬ БУФЕРА } __flash_packet_bufferwrite_t; typedef struct { __FLASH_DWORD opcode : 8; // команда ЗАПИСЬ БУФЕРА #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 15; // don't care bits (режим 512) #else __FLASH_DWORD __reserved : 14; // don't care bits (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD offset : 9; // смещение в странице (режим 512) #else __FLASH_DWORD offset : 10; // смещение в странице (режим 528) #endif } __flash_packet_bufferwrite_direct_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved2: 9; // don't care bits (режим 512) #else __FLASH_DWORD __reserved2: 10; // don't care bits (режим 528) #endif __FLASH_DWORD page : 13; // номер страницы для записи #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD opcode : 8; // команда ПРОГРАММИРОВАНИЕ БУФЕРА } __flash_packet_bufferprogram_t; typedef struct { __FLASH_DWORD opcode : 8; // команда ПРОГРАММИРОВАНИЕ БУФЕРА #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD page : 13; // номер страницы для записи #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved2: 9; // don't care bits (режим 512) #else __FLASH_DWORD __reserved2: 10; // don't care bits (режим 528) #endif } __flash_packet_bufferprogram_direct_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved2: 9; // don't care bits (режим 512) #else __FLASH_DWORD __reserved2: 10; // don't care bits (режим 528) #endif __FLASH_DWORD page : 13; // номер страницы для записи #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD opcode : 8; // команда СТИРАНИЕ СТРАНИЦЫ } __flash_packet_pageerase_t; typedef struct { __FLASH_DWORD opcode : 8; // команда СТИРАНИЕ СТРАНИЦЫ #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD page : 13; // номер страницы для записи #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved2: 9; // don't care bits (режим 512) #else __FLASH_DWORD __reserved2: 10; // don't care bits (режим 528) #endif } __flash_packet_pageerase_directt; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved2: 12; // don't care bits (режим 512) #else __FLASH_DWORD __reserved2: 13; // don't care bits (режим 528) #endif __FLASH_DWORD block : 10; // номер блока для стирания #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD opcode : 8; // команда СТИРАНИЕ БЛОКА } __flash_packet_blockerase_t; typedef struct { __FLASH_DWORD opcode : 8; // команда СТИРАНИЕ БЛОКА #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD block : 10; // номер блока для стирания #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved2: 12; // don't care bits (режим 512) #else __FLASH_DWORD __reserved2: 13; // don't care bits (режим 528) #endif } __flash_packet_blockerase_direct_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved3: 12; // don't care bits (режим 512) #else __FLASH_DWORD __reserved3: 13; // don't care bits (режим 528) #endif __FLASH_DWORD subsector: 1; // номер подсектора 0 или 1 __FLASH_DWORD __reserved2: 9; // часть номера страницы. Для сектора 0 должна быть 0 #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD opcode : 8; // команда СТИРАНИЕ БЛОКА } __flash_packet_sector0erase_t; typedef struct { __FLASH_DWORD opcode : 8; // команда СТИРАНИЕ БЛОКА #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD __reserved2: 9; // часть номера страницы. Для сектора 0 должна быть 0 __FLASH_DWORD subsector: 1; // номер подсектора 0 или 1 #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved3: 12; // don't care bits (режим 512) #else __FLASH_DWORD __reserved3: 13; // don't care bits (режим 528) #endif } __flash_packet_sector0erase_direct_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved2: 16; // don't care bits (режим 512) #else __FLASH_DWORD __reserved2: 17; // don't care bits (режим 528) #endif __FLASH_DWORD sector : 6; // номер СЕКТОРА для стирания #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD opcode : 8; // команда СТИРАНИЕ БЛОКА } __flash_packet_sectorerase_t; typedef struct { __FLASH_DWORD opcode : 8; // команда СТИРАНИЕ БЛОКА #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bit (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bit (режим 528) #endif __FLASH_DWORD sector : 6; // номер СЕКТОРА для стирания #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved2: 16; // don't care bits (режим 512) #else __FLASH_DWORD __reserved2: 17; // don't care bits (режим 528) #endif } __flash_packet_sectorerase_direct_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { #ifdef AT45DB161E_PRM512 __FLASH_DWORD offset : 9; // смещение в буфере (режим 512) #else __FLASH_DWORD offset : 10; // смещение в буфере (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD page : 13; // номер страницы для записи (режим 512) #else __FLASH_DWORD page : 13; // номер страницы для записи (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bits (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bits (режим 528) #endif __FLASH_DWORD opcode : 8; // команда ЗАПИСЬ СТРАНИЦЫ через БУФЕР } __flash_packet_pagewriteviabuffer_t; typedef struct { __FLASH_DWORD opcode : 8; // команда ЗАПИСЬ СТРАНИЦЫ через БУФЕР #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bits (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bits (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD page : 13; // номер страницы для записи (режим 512) __FLASH_DWORD offset : 9; // смещение в буфере (режим 512) #else __FLASH_DWORD page : 13; // номер страницы для записи (режим 528) __FLASH_DWORD offset : 10; // смещение в буфере (режим 528) #endif } __flash_packet_pagewriteviabuffer_direct_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved2: 9; // don't care bits (режим 512) __FLASH_DWORD page : 13; // номер страницы для чтения (режим 512) #else __FLASH_DWORD __reserved2: 10; // don't care bits (режим 528) __FLASH_DWORD page : 13; // номер страницы для чтения (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bits (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bits (режим 528) #endif __FLASH_DWORD opcode : 8; // команда ЗАПОЛНИТЬ БУФЕР из СТРАНИЦЫ } __flash_packet_bufferload_t; typedef struct { __FLASH_DWORD opcode : 8; // команда ЗАПОЛНИТЬ БУФЕР из СТРАНИЦЫ #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bits (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bits (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD page : 13; // номер страницы для чтения (режим 512) __FLASH_DWORD __reserved2: 9; // don't care bits (режим 512) #else __FLASH_DWORD page : 13; // номер страницы для чтения (режим 528) __FLASH_DWORD __reserved2: 10; // don't care bits (режим 528) #endif } __flash_packet_bufferload_t_direct; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved2: 9; // don't care bits (режим 512) #else __FLASH_DWORD __reserved2: 10; // don't care bits (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD page : 13; // номер страницы для сравнения (режим 512) #else __FLASH_DWORD page : 13; // номер страницы для сравнения (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bits (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bits (режим 528) #endif __FLASH_DWORD opcode : 8; // команда СРАВНЕНИЕ БУФЕРА } __flash_packet_buffercompare_t; typedef struct { __FLASH_DWORD opcode : 8; // команда СРАВНЕНИЕ БУФЕРА #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bits (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bits (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD page : 13; // номер страницы для сравнения (режим 512) __FLASH_DWORD __reserved2: 9; // don't care bits (режим 512) #else __FLASH_DWORD page : 13; // номер страницы для сравнения (режим 528) __FLASH_DWORD __reserved2: 10; // don't care bits (режим 528) #endif } __flash_packet_buffercompare_direct_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved2: 9; // don't care bits (режим 512) #else __FLASH_DWORD __reserved2: 10; // don't care bits (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD page : 13; // номер страницы для сравнения (режим 512) #else __FLASH_DWORD page : 13; // номер страницы для сравнения (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bits (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bits (режим 528) #endif __FLASH_DWORD opcode : 8; // команда ОБНОВЛЕНИЕ СТРАНИЦЫ } __flash_packet_autopagerewrite_t; typedef struct { __FLASH_DWORD opcode : 8; // команда ОБНОВЛЕНИЕ СТРАНИЦЫ #ifdef AT45DB161E_PRM512 __FLASH_DWORD __reserved : 2; // don't care bits (режим 512) #else __FLASH_DWORD __reserved : 1; // don't care bits (режим 528) #endif #ifdef AT45DB161E_PRM512 __FLASH_DWORD page : 13; // номер страницы для сравнения (режим 512) __FLASH_DWORD __reserved2: 9; // don't care bits (режим 512) #else __FLASH_DWORD page : 13; // номер страницы для сравнения (режим 528) __FLASH_DWORD __reserved2: 10; // don't care bits (режим 528) #endif } __flash_packet_autopagerewrite_direct_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_BYTE opcode; // команда ЧТЕНИЕ СТАТУСА } __flash_packet_statusread_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_BYTE opcode; // команда ПЕРЕХОД в спящий режим } __flash_packet_powerdown_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_BYTE opcode; // команда ВОЗВРАТ из спящего режима } __flash_packet_powerup_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_BYTE opcode; // команда ПОЛУЧИТЬ идентификатор производителя } __flash_packet_manufactureridread_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_DWORD opcode; // команда ВКЛЮЧИТЬ/ВЫКЛЮЧИТЬ защиту секторов } __flash_packet_protecttoggle_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_DWORD opcode; // команда СТЕРЕТЬ РЕГИСТР ЗАЩИТЫ } __flash_packet_protectregistererase_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_DWORD opcode; // команда ЗАПИСАТЬ РЕГИСТР ЗАЩИТЫ // ... продолжение см. функции __flash_hal__protectregister_write } __flash_packet_protectregisterwrite_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_DWORD __reserved : 24; // don't care bytes __FLASH_DWORD opcode : 8; // команда ПРОЧИТАТЬ РЕГИСТР ЗАЩИТЫ } __flash_packet_protectregisterread_t; typedef struct { __FLASH_DWORD opcode : 8; // команда ПРОЧИТАТЬ РЕГИСТР ЗАЩИТЫ __FLASH_DWORD __reserved : 24; // don't care bytes } __flash_packet_protectregisterread_direct_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_BYTE haddress; // старшая часть адреса в секторе (16...23 биты) __FLASH_WORD laddress; // младшая часть адреса в секторе (0...15 биты) __FLASH_DWORD opcode; // команда ЗАБЛОКИРОВАТЬ сектор } __flash_packet_sectorlockdown_t; typedef struct { __FLASH_DWORD opcode; // команда ЗАБЛОКИРОВАТЬ сектор __FLASH_WORD laddress; // младшая часть адреса в секторе (0...15 биты) __FLASH_BYTE haddress; // старшая часть адреса в секторе (16...23 биты) } __flash_packet_sectorlockdown_direct_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_DWORD __reserved : 24; // don't care bytes __FLASH_DWORD opcode : 8; // команда ПРОЧИТАТЬ РЕГИСТР БЛОКИРОВКИ } __flash_packet_lockdownregisterread_t; typedef struct { __FLASH_DWORD opcode : 8; // команда ПРОЧИТАТЬ РЕГИСТР БЛОКИРОВКИ __FLASH_DWORD __reserved : 24; // don't care bytes } __flash_packet_lockdownregisterread_direct_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_DWORD opcode; // команда ЗАПИСАТЬ РЕГИСТР БЕЗОПАСНОСТИ // ... продолжение см. функции __flash_hal__securityregister_write } __flash_packet_securityregisterwrite_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #pragma pack( push, 1 ) typedef struct { __FLASH_DWORD opcode; // команда ПРОЧИТАТЬ РЕГИСТР БЕЗОПАСНОСТИ } __flash_packet_securityregisterread_t; #pragma pack( pop ) //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #endif #endif