 // Файл с определениями форматов пакетов низкоуровневых коммандами для 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