ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
950063 Топик полностью
abivan (03.10.2019 16:02, просмотров: 487) ответил Ксения на Там порой разных регистров бывает дофига непонятного назначения. То перед работой какую-то процедуру инициализации требуется выполнить, то снять блокировку с записи. В даташите об этом обычно помалкивают, а когда чужой код смотришь - хоть в
по 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 и нахожу у себя в таблице нужный чип. Если и в таблице его нет ухожу в ошибку.