abivan (03.10.2019 16:02, просмотров: 533) ответил Ксения на Там порой разных регистров бывает дофига непонятного назначения. То перед работой какую-то процедуру инициализации требуется выполнить, то снять блокировку с записи. В даташите об этом обычно помалкивают, а когда чужой код смотришь - хоть в
по 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 и нахожу у себя в таблице нужный чип.
Если и в таблице его нет ухожу в ошибку.