avreal synchronisation lost
но боялись спросить.
Судя по логам сайта, довольно часто ищут фразу «synchronisation lost», но почему-то до сих пор никто не спроcил об этом в комментариях к страничке avreal.
Сообщение «synchronisation lost» означает нарушение обмена информацией с программируемым микроконтроллером. Обмен по SPI между адаптером и встроенной в микроконтроллер аппаратурой программирования осуществляется так же, как и между двумя мироконтроллерами.

Посылаемые программатором байты попадают в регитр сдвига аппаратуры программирования и, если не будут заменены информацией от неё, снова будут переданы назад в программатор.
При выполнении команд записи ответом на первый байт будет последний байт предыдущей команды, а первые три байта 4-байтной команды будут повторены на выходе MISO со смещением на один байт.
При выполнении команд чтения первые два байта возвращаются во втором и третьем байте ответа, а в четвёртом байте ответа третий байт команды заменяется на прочитанный из микроконтроллера.
Например, при выполнении команды Read Fuse High bits поток данных выглядит следующим образом
| Direction | Byte 1 | Byte 2 | Byte 3 | Byte 4 |
|---|---|---|---|---|
| programmer → controller | 0×58 | 0×08 | 0×00 | 0×00 |
| controller → programmer | last byte of previous command |
0×58 | 0×08 | fuse value |
Посмотреть некоторые команды и ответы на них в процессе работы avreal можно при помощи ключа -%.
Adapter enabled % Reset % PgmOn reply FF FE 53 00 % Synchronised after 1 try % GetID reply 00 30 00 1E % GetID reply 00 30 00 94 % GetID reply 00 30 00 06 % Read ID: 0x1E9406 Device connected, mega168|mega168A detected % Read Lock command 58 00 00 00, reply 00 58 00 FF Chip not locked % Read Osccal command 38 00 00 00, reply 00 38 00 B0 % Read Fuses command 50 00 00 00, reply 00 50 00 C2 % Read Fuses command 58 00 00 00, reply 00 58 00 FF % Read Fuses command 58 08 00 00, reply 00 58 08 DD % Read Fuses command 50 08 00 00, reply 00 50 08 F9
Таким образом, при синхронной работе программатора и микроконтроллера байты 2 и 3 ответа будуть совпадать с байтами 1 и 2 команды.
Несовпадение во время передачи означает, что микроконтроллер вышел из режима программирования и перестал отвечаь на команды или то, что в петле обмена была искажена команда или ответ на неё. В любом случае не стоит продолжать работу с микроконтроллером, так как неправильно воспринятые команды могут, например, устанивить нежелательное значение fuses. Поэтому при несовпадении avreal выходит из режима программирования и заканчивает работу с указанным сообщением.
Аналогичным образом происходит вход в программирование. Разница в том, что первый байт команды не передаётся назад в программатор, так как на этот момент микроконтроллер ещё не вошёл в режим программирования. В конце приёма второго байта последовательности 0xAC 0×53 0×00 0×00 микроконтроллер входит в режим программирования и в третьем байте передаёт наза значение 0×53. Если ответ другой, то проводится процедура пересинхронизации, например, такая
3. The Serial Programming instructions will not work if the communication is out of synchronization. When in sync. the second byte (0×53), will echo back when issuing the third byte of the Programming Enable instruction. Whether the echo is correct or not, all four bytes of the instruction must be transmitted. If the 0×53 did not echo back, give RESET a positive pulse and issue a new Programming Enable command.
Если через заданное количество попыток не удаётся получить правильный ответ, avreal завершает работу с сообщеним Can’t resync (второе место после synchronisation lost по количеству тех, кто боится спросить).
Наиболее вероятными причинами нарушений синхронизации есть «грязные» сигналы на линиях программирования и частота SCK на грани того, что может воспринять микроконтроллер. В первом случае следует обратить внимание на качество изготовления адаптера программирования и кабелей, разводку земли, во втором — снизить частоту тактирования SPI ключом -o (-os).
українська
русский
english