Проц делает вид что шьется

Проц AT90USB1286 (Teensy). Но вопрос общий.

В один прекрасный момент проц перестал обновлять загруженный код в своей памяти, т.е. прошивка проходит, но код остается старый. В компиляторе и логе о ходе прошивки никаких ошибок, показывает что обнаружен бутлоадер, идет прошивка блоков flash 0…7. Отличия лога хода прошивки с точно такой же рабочей платой в нескольких строчках, в целом все выглядит рабочим. Даже “Blink” не обновляет в памяти. Все пины отключены, плата голая, компилятор определяет плату, usb шина проца электрически в порядке.
Старый код, загруженный в проц до момента когда всё было в порядке, полностью работает по I2C, SPI, UART, прерываниям, портам и показывает build date своей старой загрузки, т.е. дата загрузки на новую тоже не обновляется.
До этого периодически шил пару сотен раз наверно.

Было у кого-то похожее?

И? Они секретны?

В LOCK битах ?

Таким не балуюсь. Шью через Arduino IDE + Teensyduino. В них нет опций для битов проца.
Где и как проверить какой установлен лок бит, или как его снять?

Вот лог загрузки.

21:29:03.487 (ports 5): WM_DEVICECHANGE DBT_DEVICEREMOVECOMPLETE
21:29:03.487 (ports 5): remove: loc=usb:0/140000/0/1
21:29:03.487 (ports 5): usb_remove: usb:0/140000/0/1
21:29:03.487 (ports 5): nothing new, skipping HID & Ports enum
21:29:03.493 (ports 5): WM_DEVICECHANGE DBT_DEVNODES_CHANGED
21:29:03.494 (ports 5): nothing new, skipping HID & Ports enum
21:29:03.495 (ports 5): WM_DEVICECHANGE DBT_DEVICEREMOVECOMPLETE
21:29:03.496 (ports 5): nothing new, skipping HID & Ports enum
21:29:03.991 (ports 5): WM_DEVICECHANGE DBT_DEVICEARRIVAL
21:29:03.992 (ports 5): found_usb_device, id=\\?\usb#vid_16c0&pid_0478#5&201b4142&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
21:29:03.992 (ports 5): found_usb_device, loc=usb:0/140000/0/1    Port_#0001.Hub_#0001
21:29:03.992 (ports 5): found_usb_device, hwid=USB\VID_16C0&PID_0478&REV_0120
21:29:03.992 (ports 5): found_usb_device, devinst=00000009
21:29:03.992 (ports 5): add: loc=usb:0/140000/0/1, class=HID, vid=16C0, pid=0478, ver=0120, serial=, dev=\\?\usb#vid_16c0&pid_0478#5&201b4142&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
21:29:03.992 (ports 5): hiddev_from_devinst_list: iface=0
21:29:03.992 (ports 5): found_usb_device complete
21:29:03.993 (ports 5): hid, found devinst=0000000A
21:29:03.993 (ports 5): hid, path=\\?\hid#vid_16c0&pid_0478#6&17532473&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
21:29:03.993 (ports 5): hid,  opened handle
21:29:03.993 (ports 5):  devinst=0000000A, location=usb:0/140000/0/1
21:29:03.993 (ports 5):  vid=16C0, pid=0478, ver=0120, usepage=FF9C, use=001C
21:29:03.993 (ports 5):  devpath=\\?\hid#vid_16c0&pid_0478#6&17532473&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
21:29:03.993 (ports 5): usb_add: usb:0/140000/0/1  hid#vid_16c0&pid_0478 (Teensy++ 2.0) Bootloader
21:29:04.042 (ports 5): WM_DEVICECHANGE DBT_DEVNODES_CHANGED
21:29:04.043 (ports 5): nothing new, skipping HID & Ports enum
21:29:04.049 (ports 5): WM_DEVICECHANGE DBT_DEVNODES_CHANGED
21:29:04.050 (ports 5): nothing new, skipping HID & Ports enum
21:29:04.219 (loader): Device came online, code_size = 130048
21:29:04.223 (loader): Board is: Teensy++ 2.0 (AT90USB1286)
21:29:04.241 (loader): File "Blink.ino.hex". 1980 bytes, 2% used
21:29:04.251 (loader): set background IMG_ONLINE
21:29:04.263 (loader): File "Blink.ino.hex". 1980 bytes, 2% used
21:29:04.270 (loader): elf appears to be for Teensy++ 2.0 (AT90USB1286) (130048 bytes)
21:29:04.271 (loader): elf binary data matches hex file
21:29:04.273 (loader): elf file is for Teensy++ 2.0 (AT90USB1286)
21:29:04.278 (loader): begin operation
21:29:04.291 (loader): flash, block=0, bs=256, auto=1
21:29:04.295 (loader):  gauge old value = 0
21:29:04.299 (loader): flash, block=1, bs=256, auto=1
21:29:04.303 (loader):  gauge old value = 1
21:29:04.306 (loader): flash, block=2, bs=256, auto=1
21:29:04.308 (loader):  gauge old value = 2
21:29:04.311 (loader): flash, block=3, bs=256, auto=1
21:29:04.317 (loader):  gauge old value = 3
21:29:04.321 (loader): flash, block=4, bs=256, auto=1
21:29:04.324 (loader):  gauge old value = 4
21:29:04.332 (loader): flash, block=5, bs=256, auto=1
21:29:04.339 (loader):  gauge old value = 5
21:29:04.343 (loader): flash, block=6, bs=256, auto=1
21:29:04.350 (loader):  gauge old value = 6
21:29:04.355 (loader): flash, block=7, bs=256, auto=1
21:29:04.360 (loader):  gauge old value = 7
21:29:04.369 (loader): sending reboot
21:29:04.375 (loader): begin wait_until_offline
21:29:04.380 (loader): HID/win32: HidD_GetPreparsedData ok, device still online :-)
21:29:04.387 (ports 5): WM_DEVICECHANGE DBT_DEVICEREMOVECOMPLETE
21:29:04.388 (ports 5): remove: loc=usb:0/140000/0/1
21:29:04.388 (ports 5): usb_remove: usb:0/140000/0/1
21:29:04.388 (ports 5): nothing new, skipping HID & Ports enum
21:29:04.453 (loader): offline, waited 1
21:29:04.484 (loader): end operation, total time = 0.205 seconds
21:29:04.491 (loader): set background IMG_REBOOT_OK
21:29:04.500 (loader): redraw timer set, image 14 to show for 1200 ms
21:29:04.522 (ports 5): WM_DEVICECHANGE DBT_DEVNODES_CHANGED
21:29:04.522 (ports 5): nothing new, skipping HID & Ports enum
21:29:04.729 (ports 5): WM_DEVICECHANGE DBT_DEVNODES_CHANGED
21:29:04.730 (ports 5): nothing new, skipping HID & Ports enum
21:29:04.733 (ports 5): WM_DEVICECHANGE DBT_DEVICEARRIVAL
21:29:04.734 (ports 5): found_usb_device, id=\\?\usb#vid_16c0&pid_0483#12345#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
21:29:04.734 (ports 5): found_usb_device, loc=usb:0/140000/0/1    Port_#0001.Hub_#0001
21:29:04.734 (ports 5): found_usb_device, hwid=USB\VID_16C0&PID_0483&REV_0272
21:29:04.734 (ports 5): found_usb_device, devinst=00000002
21:29:04.734 (ports 5): add: loc=usb:0/140000/0/1, class=Ports, vid=16C0, pid=0483, ver=0272, serial=12345, dev=\\?\usb#vid_16c0&pid_0483#12345#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
21:29:04.734 (ports 5):   comport_from_devinst_list attempt
21:29:04.734 (ports 5):   found Ports in classguid_list at index=0
21:29:04.734 (ports 5):   port COM3 found from devnode
21:29:04.734 (ports 5): found_usb_device complete
21:29:04.735 (ports 5): usb_add: usb:0/140000/0/1  COM3 (Teensy++ 2.0) Serial
21:29:04.840 (ports 5): WM_DEVICECHANGE DBT_DEVNODES_CHANGED
21:29:04.840 (ports 5): WM_DEVICECHANGE DBT_DEVICEARRIVAL
21:29:04.841 (ports 5): nothing new, skipping HID & Ports enum
21:29:05.698 (loader): redraw, image 9

У меня такое было с нано.
Беда с локбитами.
Восстановить не вышло.
Локбиты перезаписывается, но их значение не меняется.
Лежит как донор

А где мне их посмотреть и прочитать, какие стоят? Я шью Arduino IDE + Teensyduino (надстройка для Arduino IDE для платы Teensy).

Для атмеги есть видео где с такой проблемой загрузчик прошили, и все ок.
https://www.youtube.com/watch?v=G-R9dqEtur0

AVRDUDE_PROG 3.3 умеет с этими “камушками” работать. Попробуй через него.

сам то пробовал?

Тинси не предоставляет свой бутлоадер.

Один чел пробовал дописать второй бутлоадер на рабочей плате Тинси с Atmega32u4 в свободное место, прочел фузы и локбиты, фузы залочены, он не может их изменить чтобы изменить размер области бутлоадера, единственный вариант полностью стирать чип.
На видео тоже тинси 32U4, залили туда ардуиновский бутлоадер, пины перепутаны, но работает.
Учитывая что тинси у меня скорее всего китайские (алиэкспресс и местный магазин), и судя по описанной проблеме разработчик тинси полагает что так ведут себя платы с китайским софтом, то решения нет.

Проблема может возникла что проц по юсб прошивался в основном в рабочем аппарате, с подключенными портами и шинами, иногда при просадке питки 4.65V, может в один момент его китайский чип или бутлоадер глюкануло.
Или китайцы включили счетчик кол-ва прошивок чтобы увеличить продажи.

Через ISP этот чип умеет принимать прошивку ?

JTAG (IEEE std. 1149.1 compliant) interface
– Boundary-scan capabilities according to the JTAG standard
– Extensive on-chip debug support
– Programming of flash, EEPROM, fuses, and lock bits through the JTAG interface

Если и можно прошить, подключать программатор каждый раз такое себе.

один раз поправить фьюзы:

AT90USB1286	
AT90USB1286 [ISP Mode]	
AT90USB1286 [ISP JTAG Mode]	
AT90USB1286 [ISP JTAG-Chain

Это чиппрогом ежели что…
Есть и загрузчик…

Этот комплект поставляется со специализированным загрузчиком для 646, 647, 1286, 1287 и AT90USBKEY. Загрузчик основан на загрузчике LUFA CDC от Dean Camera, но был изменен, чтобы соответствовать его требованиям и вписаться в область загрузчика 4 КБ, что снижает общие требования к загрузчику и освобождает 4 КБ флэш-памяти. Вы найдете исходный код и предварительно скомпилированные шестнадцатеричные образы в каталоге hadrware/DynamicPerception/avr/bootloaders/.

Обратите внимание, что в настоящее время запись загрузчиков через Arduino IDE не поддерживается.

AT90USB1286

ЕС. А вы видите другой способ оживления вашего полукирпича кроме как сделать полный сброс ???

Чиппрог дорогой для покупки, а ПО AVR Dude простое, там нет фузов с JTAG. Может еще какие-то рекомендации? Через jtag никогда не программировал.

Теперь стрёмно программировать :scream: Ответ Teensy:

My best blind guess is your code got the chip into a state the counterfeit bootloader can’t handle. We’ve seen this sort of thing many times before, where genuine boards handle weird cases properly, but counterfeits get bricked. Years ago it was a problem when Teensy 3.2 counterfeits appeared, which would become permanently bricked if programmed with any code that configured the CPU to 24 MHz rather than the usual 96 or 72 MHz.

Low quality counterfeits of the old Teensy 2.0 boards have been around for many years. PJRC really hasn’t done much about those counterfeits, as we’ve poured all the available time & effort into making new versions like Teensy 4.0 & 4.1.

Even if your question wasn’t about counterfeit product, I’m pretty sure you probably have a counterfeit board that doesn’t properly handle unusual circumstances. This really is the only likely explanation. Genuine Teensy++ 2.0 boards don’t do the thing your describing. Counterfeits do.

…я не я, и лошадь не моя…

Они наверно должны были предложить прислать им фуфло в америку, и выслать мне оригинал, который у них уже давно не производится.

Они предложили вернуть фуфло где покупал и а-та-та на магазин (читай на китайцев) чтобы не штамповали фуфло, с которым они так борются.

интересно, что там такое сделали, что понадобилась именно такая плата?

PS Чип-прог есть в любом сервисном центре

Мне они понравились что компактные, простые , много пинов, шины в ассортименте, совместимость. Новые щас 600МГц, думаю её взять. На али естественно :sweat_smile: Остальное все что смотрел или габаритное, или пинов мало, не понравилось.

так цена там сильно недемократичная