- posted
19 years ago
AVR fuse bits programming via SPI...
- Vote on answer
- posted
19 years ago
TV> Каков алгоритм чтения и программирования FUSE битов в AVR микроконтроллеров TV> по интерфейсу SPI? TV> К примеру формат инструкции микроконтроллера AT90S4433 TV> Read Fuse Bits: 1010 0000 xxxx xxxx xxxx xxxx xx87645 TV> совпадает с инструкцией TV> Read EEPROM Memory: 1010 0000 xxxx xxxa bbbb bbbb oooo oooo Русский перевод на 90s4433 читал или просто недосмотрел? Для read fuse bits вначале идёт 0101 а не 1010.
TV> К тому же, в описании микроконтроллеров ATmega читаю: TV> "The Fuse values are latched when the device enters programming mode and TV> changes of the Fuse values will have no effect until the part leaves TV> Programming mode. This does not apply to the EESAVE Fuse which will take TV> effect once it is programmed. The fuses are also latched on Power-up in TV> Normal mode." TV> Т.е., если я правильно понял, то для программирования Fuse bits (за TV> исключением EESAVE Fuse) в алгоритме программирования необходимо после TV> "Power-up sequence" пропустить шаг синхронизации "Programming Enable TV> serial TV> programming" и переходить непосредственно к записи / чтению Fuse bits. Из чего такой вывод? После power up надо войти в программирование, иначе ни одна из команд программирования работать не будет. Более того, fuse bits запоминаются в защёлках по пути к тем местам, которыми они управляют, но читаются программатором непосредственно они до защёлок. Поэтому, например, если перед программированием кристалл был поставлен на кварц и там было, скажем, 4МГц, а программатором его переставили на 128кГц внутренний RC, то до конца процесса программирования он всё равно останется на кварце (такое в защёлках) и можно будет работать с ним по SPI на высокой частоте, но по read fuse bits будет читаться новое значение, соответствующее RC.
wbr,
- Vote on answer
- posted
19 years ago
- Vote on answer
- posted
19 years ago
- Vote on answer
- posted
19 years ago
TV> Фьюзе битс пишется, что, конечно, радует, но я так понимаю, что фьюзе TV> пишется в память типа EEPROM, поэтому необходимо выдержать паузу между TV> записью Low Fuse Byte, High Fuse Byte and Extended Fuse Byte, которая TV> для TV> ATmega32 составляет порядка 9 ms... Да, конечно, задержка нужна. Для нескольких кристаллов она даже в документации прописана была :-) На всякий случай я делаю двойную задержку EEPROM (не жалко, fuse-байтов не так много).
wbr,