 abivan (03.10.2019 16:02, просмотров: 663) ответил Ксения на Там порой разных регистров бывает дофига непонятного назначения. То перед работой какую-то процедуру инициализации требуется выполнить, то снять блокировку с записи. В даташите об этом обычно помалкивают, а когда чужой код смотришь - хоть в
 abivan (03.10.2019 16:02, просмотров: 663) ответил Ксения на Там порой разных регистров бывает дофига непонятного назначения. То перед работой какую-то процедуру инициализации требуется выполнить, то снять блокировку с записи. В даташите об этом обычно помалкивают, а когда чужой код смотришь - хоть в
по JedecID вынимаю из таблицы остальные необходимые параметры.  
#define OPCODE_DEFAULT      {                                     \
                              EXTF_OPCODE_WREN,                   \
                              EXTF_OPCODE_WRSR,                   \
                              EXTF_OPCODE_READ,                   \
                              EXTF_OPCODE_PAGE_PROGRAM,           \
                              EXTF_DEFAULT_OPCODE_RDSR,           \
                              EXTF_DEFAULT_OPCODE_BLOCK_ERASE     \
                            }
const EXTF_OpCode_t   OpCodeDefault = OPCODE_DEFAULT;
const EXTF_ChipInfo_t  SPIFlashInfo[]={
  { //M25PE80 Micron
    0x14802000, //JEDEC ID Byte 3 2 1 0
    8 Mbit,     //uint32_t dwTotalFlashSize;
    4 KB,       //uint16_t wSizeEraseRegions;
    256,
    OPCODE_DEFAULT
  },
  { //MX25R3235F Macronix
    0x1628C200, //JEDEC ID Byte 3 2 1 0
    32 Mbit,    //uint32_t dwTotalFlashSize;
    4 KB,       //uint16_t wSizeEraseRegions;
    256,
    OPCODE_DEFAULT
  },
  {
    -1 //End of array
  }
};
Но возник резонный вопрос, а что будет если замена памяти на аналогичную? JEDECid то будет другой и прога работать не будет.
Полез разбираться.  Нашел что с 2010 года ввели регистор SFDP. Там много чего есть вендоры даже тайминги в него зашивают, но стандартно оттуда можно вычитать только
размер памяти, размер стираемого сектора(блока и тд), команду стирания сектора(блока и тд)
команду чтения статусного регистра.
Задал я тут вопрос на сахаре, а остальные команды как то стандартизированы? Не получив ответа начал советоваться с интернетом. Интернет решил, что стандарта нет и производители просто договариваются(делают как все)
Мне еще нужен был параметр размер страницы записи. его в SFDP тоже нет. 
Прошерстив разных производителей и разные микросхемы не нашел размер страницы отличной от 256.
Поэтому забил дефолтные параметры. 
Алгоритм инициализации флэши:
читаю SFDP, если его нет
вычитываю нулевой сектор флэши( с инфой о флэши), если такой информации нет 
читаю jedecid и нахожу у себя в таблице нужный чип.
Если и в таблице его нет ухожу в ошибку.