avreal synchronisation lost

Все, про що ви хотіли дізнатися,
але боялися спитати.

Судячи з логів сайту, доволі часто шукають фразу «synchronisation lost», але чомусь досі ніхто не задав запитання про неї у коментарях до сторінки avreal.

Повідомлення «synchronisation lost» означає порушення обміну інформацією з програмованим мікроконтроллером. Обмін по SPI між адаптером програмування та вбудованою в мікроконтроллер апаратурою програмування відбувається так само, як і між двома мікроконтроллерами.

spi-loop

Байти, які посилаються програматором (MASTER), потрапляють в регістр зсуву апаратури програмування (SLAVE) та, якщо не будуть замінені на інформацію від неї, знову будуть передані назад в програматор.

При виконанні команд запису у відповідь на перший байт приходить останній байт попередньої команди, а перші три байти чотирибайтової команди повторюються на виході 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).

Leave a Reply

[flagcounter image]