#1 2024-02-09 13:29:51

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Lock bit на arduino nano

Вітаю. Як виставити лок біти на arduino nano? Через юсб я так зрозумів це неможливо? А через ArduinoASP через другу Nano ?

Неактивний

#2 2024-02-09 13:47:41

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Lock bit на arduino nano

Так, через бутлоадер неможливо змінити ні EEPROM, ні ф'юзи, ні лок-біти, можливо лише flash.
Гляньте цю тему, команда приблизно така (замініть t13a на свою m328 і значення лок-бітів з даташиту):
avrdude -P COM3 -b 19200 -c avrisp -p t13a -U lock:w:0x3c:m

Неактивний

#3 2024-02-09 14:19:49

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Re: Lock bit на arduino nano

Honey пише:

Так, через бутлоадер неможливо змінити ні EEPROM, ні ф'юзи, ні лок-біти, можливо лише flash.
Гляньте цю тему, команда приблизно така (замініть t13a на свою m328 і значення лок-бітів з даташиту):
avrdude -P COM3 -b 19200 -c avrisp -p t13a -U lock:w:0x3c:m

Про avrdude читав, але всеодно питання залишилось: чи достатньо nano використати як ArduinoISP для зміни лог бітів іншої нано чи все ж таки купляти окрему avrisp? На ютюбі бачив відео де було сказано що nano для avrdude і різних бітів не дуже підходить

І ще про порядок такої прошивки: я заливаю скетч, і потім окремо виставляю лок біти? А після лок бітів можно ще раз заливати прошивку чи вже все?

Неактивний

#4 2024-02-09 14:52:35

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Lock bit на arduino nano

Shaman2 пише:

чи достатньо nano використати як ArduinoISP для зміни лог бітів іншої нано чи все ж таки купляти окрему avrisp? На ютюбі бачив відео де було сказано що nano для avrdude і різних бітів не дуже підходить

Прошивають і змінюють біти вони абсолютно однаково, тут питання лише в зручності підключення до програматора окремими дротами або готовим шлейфом.

Shaman2 пише:

І ще про порядок такої прошивки: я заливаю скетч, і потім окремо виставляю лок біти? А після лок бітів можно ще раз заливати прошивку чи вже все?

Лок-біти працюють так:
* їх можна встановити на будь-якому етапі
* їх можна скинути лише з одночасною очисткою флешу і еепром
* коли встановлені, то замість флеш і еепром читаються випадкові дані
Це дає можливість:
* захистити прошивку від читання
* багаторазово оновлювати прошивку
Не плутайте лок-біти з ф'юзами, деякі ф'юзи можуть "зацеглити" м/к, але лок-бітів це не стосується, вони безпечні.

Неактивний

#5 2024-02-09 15:03:40

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Re: Lock bit на arduino nano

Тепер трошки зрозуміло, дякую, попобую сьогодні перешити Nano в ArduinoISP і спробувати.

І ще одне питання: використовуються D11, D12, D13, тобто якщо в мене до цих ніг щось підключене, то доведеться спочатку відпаяти перед тим як вносити зміни по бітам? А якщо там вже зашита прошивка яка використовує ці ноги?
Тобто краще в нову ардуіно прошити лок біти, а потім вже розпаюваті і заливати прошивку?

І друге: на Вашій схемі небачу перемички чи конденсатора на RST програматора, він вже не потрібен?

Остання редакція Shaman2 (2024-02-09 15:06:23)

Неактивний

#6 2024-02-09 18:21:30

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Lock bit на arduino nano

Shaman2 пише:

І ще одне питання: використовуються D11, D12, D13, тобто якщо в мене до цих ніг щось підключене, то доведеться спочатку відпаяти перед тим як вносити зміни по бітам? А якщо там вже зашита прошивка яка використовує ці ноги?
Тобто краще в нову ардуіно прошити лок біти, а потім вже розпаюваті і заливати прошивку?

Коли RST замикається на землю, робота прошивки зупиняється і всі ноги мк переходять в високоімпедансний стан (крім MISO), тому відповідь на питання чи можна не випаювати мк зі схеми залежить лише від Вашої схеми а не від прошивки, дивіться по схемі, як вона реагуватиме на наявність сигналів на SCK,MISO,MOSI.

Shaman2 пише:

І друге: на Вашій схемі небачу перемички чи конденсатора на RST програматора, він вже не потрібен?

Конденсатор (між RST і GND, або RST і VCC) чи перемичка (між RST і VCC) використовуються як лайфхак, якщо драйвер USB-UART (CH340) неправильно керує сигналом DTR, в мене в віндовс 10 з цим проблем немає, в лінуксі пробема зникла коли перейшов на ядро 5.4.х (на 4.х ще була така проблема).

Неактивний

#7 2024-02-09 18:36:35

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Re: Lock bit на arduino nano

Дякую, руки вже хочуть спробувати, звільнюсь від основної роботи и перешью нано в програматор

Неактивний

#8 2024-02-09 23:10:48

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Re: Lock bit на arduino nano

Honey пише:

Так, через бутлоадер неможливо змінити ні EEPROM, ні ф'юзи, ні лок-біти, можливо лише flash.
Гляньте цю тему, команда приблизно така (замініть t13a на свою m328 і значення лок-бітів з даташиту):
avrdude -P COM3 -b 19200 -c avrisp -p t13a -U lock:w:0x3c:m

Зробив. Прошивку читаю та записую без проблем. А от спроба встановити lock bit отримую

E:222avrdude-v7.1-windows-windows-x64>avrdude -P COM70 -b 57600 -c avrisp -p m328p -U lock:w:0x3C:m

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e950f (probably m328p)
avrdude: reading input file 0x3C for lock
         with 1 byte in 1 section within [0, 0]
avrdude: writing 1 byte lock ...
***failed;
avrdude: 1 byte of lock written
avrdude: verifying lock memory against 0x3C
avrdude warning: verification mismatch
        device 0x00 != input 0x3c at addr 0x0000 (error)
avrdude error: verification mismatch

avrdude done.  Thank you.

Неактивний

#9 2024-02-09 23:35:51

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Lock bit на arduino nano

Після заливки прошивки (це скидає лок в початкове значення 0xff) спробуйте спочатку прочитати (-U lock:r:-:h), читає 0xff чи 0x00 ?
Почитайте в даташиті на m328p, що які лок-біти означають, я давав приклад для t13a.
Ще там є прикол, що записуєш одне значення, а при читанні (перевірці) деякі біти дзеркаляться в інші позиції (наприклад в t13a записуєш 0xfc=0b11111100, а при читанні повертає 0x3c=0b00111100, біти з позицій 0 і 1 дзеркаляться в 6 і 7 позиції)

Неактивний

#10 2024-02-09 23:43:18

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Re: Lock bit на arduino nano

Honey пише:

Після заливки прошивки (це скидає лок в початкове значення 0xff) спробуйте спочатку прочитати (-U lock:r:-:h), читає 0xff чи 0x00 ?


E:avrdude-v7.1-windows-windows-x64>avrdude -P COM70 -b 57600 -c avrisp -p m328p -U lock:r:-:h                                                                                                                                                                                       avrdude: AVR device initialized and ready to accept instructions                                                                                    avrdude: device signature = 0x1e950f (probably m328p)                                                                                               avrdude: reading lock memory ...                                                                                                                    avrdude: writing output file <stdout>                                                                                                               0x0                                                                                                                                                                                                                                                                                                     avrdude done.  Thank you.

Неактивний

#11 2024-02-09 23:45:30

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Re: Lock bit на arduino nano

Але я все скомутував через розєм ICSP, тільки ресет прокинув окремо з D10

Але ж це теж вірно, прошивка ж записується і читається

Неактивний

#12 2024-02-10 00:12:19

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Lock bit на arduino nano

Shaman2 пише:

E:avrdude-v7.1-windows-windows-x64>avrdude -P COM70 -b 57600 -c avrisp -p m328p -U lock:r:-:h

Не помітив одразу... ArduinoISP працює ж на швидкості 19200 а не 57600. У Вас наявна проблема з драйвером CH340 і потрібен "лайфхак з RST". Тобто зараз драйвер смикає DTR і Ви заливаєте прошивку і читаєте лок не з цілі а з тієї нано, що напряму підключена до юсб.
Залийте спочатку ArduinoISP.hex (бо зараз Ви його затерли), а потім поставте конденсатор між RST і GND на програматорі і спробуйте ще раз прочитати лок, має бути 0xff.

Неактивний

#13 2024-02-10 00:13:00

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Re: Lock bit на arduino nano

Так, розібрався. Значить не 57600, а 19200 швидкість, тут я помилявся. І все одно не запустилось, але писало іншу помилку. Я раніше питав про перемичку сигналу RST, так от, замкнув RST на 5в і все запрацювало як потрібно

Тепер тільке одне мені не зрозуміло, гугл пише що в нано потрібно передавати lock bit 0x3С, так і роблю.
Але получаю ругань

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e950f (probably m328p)
avrdude: reading input file 0x3C for lock
         with 1 byte in 1 section within [0, 0]
avrdude: writing 1 byte lock ...
***failed;
avrdude: 1 byte of lock written
avrdude: verifying lock memory against 0x3C
avrdude warning: ignoring mismatch in unused bits of lock
        (device 0xfc != input 0x3c); to prevent this warning set
        unused bits to 1 when writing (double check with datasheet)
avrdude: 1 byte of lock verified

Після чого читаю біт
avrdude: AVR device initialized and ready to accept instructions                                                                                    avrdude: device signature = 0x1e950f (probably m328p)                                                                                               avrdude: reading lock memory ...                                                                                                                    avrdude: writing output file <stdout>                                                                                                               0xfc                         

Тобто потрібно передавати не 3c, а fc? Помилка в гуглі чи в мене в голові? Запустив AVRDUDE_PROG.exe, він теж видає 3C

Неактивний

#14 2024-02-10 00:14:16

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Re: Lock bit на arduino nano

Honey пише:
Shaman2 пише:

E:avrdude-v7.1-windows-windows-x64>avrdude -P COM70 -b 57600 -c avrisp -p m328p -U lock:r:-:h

Не помітив одразу... ArduinoISP працює ж на швидкості 19200 а не 57600. У Вас наявна проблема з драйвером CH340 і потрібен "лайфхак з RST". Тобто зараз драйвер смикає DTR і Ви заливаєте прошивку і читаєте лок не з цілі а з тієї нано, що напряму підключена до юсб.
Залийте спочатку ArduinoISP.hex (бо зараз Ви його затерли), а потім поставте конденсатор між RST і GND на програматорі і спробуйте ще раз прочитати лок, має бути 0xff.

Так і є, хоча в мене win10 x64

Неактивний

#15 2024-02-10 00:30:14

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Lock bit на arduino nano

0x3c це приклад для tiny13a, я ж написав, що Вам для своєї m328p потрібно почитати в даташиті правильне значення. Я записую в tiny13a 0x3c (хоча по даташиту маю записувати 0xfc), щоб не виводило помилку.
Подивився даташит, Вам для m328p потрібно також писати 0xfc і у Вас і читається 0xfc, тобто все ок.
Якщо розберетесь як оновити драйвер, щоб був не потрібен лайфхак, відпишіться, будь ласка, в цю тему.

Неактивний

#16 2024-02-10 01:19:52

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Re: Lock bit на arduino nano

Honey пише:

0x3c це приклад для tiny13a, я ж написав, що Вам для своєї m328p потрібно почитати в даташиті правильне значення. Я записую в tiny13a 0x3c (хоча по даташиту маю записувати 0xfc), щоб не виводило помилку.
Подивився даташит, Вам для m328p потрібно також писати 0xfc і у Вас і читається 0xfc, тобто все ок.
Якщо розберетесь як оновити драйвер, щоб був не потрібен лайфхак, відпишіться, будь ласка, в цю тему.

Дякую за допомогу.
Якщо найду проблему то напишу, а поки що:
Самий простий спосіб це RST замкнути на +5в, але тут потрібно бути уважним щоб випадково не нажати кнопку ресет на платі інакше може бути пшик. Тому краще всеж через конденсатор RST на GND, я тільки що так перепаяв, все ок

Остання редакція Shaman2 (2024-02-10 01:21:39)

Неактивний

#17 2024-02-10 01:24:30

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Re: Lock bit на arduino nano

В мене драйвер 3.5.2019.1, спробую останній 3.6.2021.12

Остання редакція Shaman2 (2024-02-10 01:25:46)

Неактивний

#18 2024-02-10 14:56:25

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Re: Lock bit на arduino nano

Ще одне таке питання: після залочки (біт FC) на нано пропадає можливість запису прошивки через usb, процес просто висить.
Через arduinoISP прошивається. Це так і має бути?

Зашив прошивку через arduinoISP, біт скинувся на FF, але через usb вже не прошивається. Хоча юсб працює, через serial я отримую данні з прошивки

Остання редакція Shaman2 (2024-02-10 14:57:48)

Неактивний

#19 2024-02-10 15:22:08

Васятко
Гість

Re: Lock bit на arduino nano

https://forum.arduino.cc/t/arduino-uno-how-to-set-reading-protection-lock-bits/876927

#20 2024-02-10 18:43:52

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Lock bit на arduino nano

Shaman2 пише:

Ще одне таке питання: після залочки (біт FC) на нано пропадає можливість запису прошивки через usb, процес просто висить.
Через arduinoISP прошивається. Це так і має бути?

Зашив прошивку через arduinoISP, біт скинувся на FF, але через usb вже не прошивається. Хоча юсб працює, через serial я отримую данні з прошивки

Коли Ви записуєте прошивку в ціль, то затирається бутлоадер.
Подивіться інструкцію, там є приклади, як відновити бутлоадер.

Неактивний

#21 2024-02-10 18:51:17

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Lock bit на arduino nano

Доречі "відключити бутлоадер" і "затерти бутлоадер" це не одне й те ж, затертий бутлоадер все одно буде виконуватись, але оскільки в ньому порожні команди, то керування врешті передасться на прошивку користувача, а ці кілька десятків зайвих мікросекунд Ви не помітите.

Неактивний

#22 2024-02-11 15:27:35

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Re: Lock bit на arduino nano

Honey пише:
Shaman2 пише:

Ще одне таке питання: після залочки (біт FC) на нано пропадає можливість запису прошивки через usb, процес просто висить.
Через arduinoISP прошивається. Це так і має бути?

Зашив прошивку через arduinoISP, біт скинувся на FF, але через usb вже не прошивається. Хоча юсб працює, через serial я отримую данні з прошивки

Коли Ви записуєте прошивку в ціль, то затирається бутлоадер.
Подивіться інструкцію, там є приклади, як відновити бутлоадер.

Я так зрозумів що ця optiboot найкраща, раніше в мене з заводу йшла old_bootloader
А думав що тут той самий принцип як і заливкою через usb, якщо заливаємо hex без бутлоадеру, то при перепрошивці бутлоадер не чіпається. А тут виявляється що потрібно заливати hex з назвою ....ino.with_bootloader.hex або прошивати бутлоадер при потребі окремо?

І ще тоді запитання: при наявності бутлоадера і залочці через lock bit через бутлоадер можно прошивку зляти? В гуглі одні пишуть так, інші пишуть ні

Неактивний

#23 2024-02-11 18:32:02

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Lock bit на arduino nano

Shaman2 пише:

А думав що тут той самий принцип як і заливкою через usb, якщо заливаємо hex без бутлоадеру, то при перепрошивці бутлоадер не чіпається. А тут виявляється що потрібно заливати hex з назвою ....ino.with_bootloader.hex або прошивати бутлоадер при потребі окремо?

В бутлоадері запрограмовано, щоб він сам себе не затирав.
В avrdude просто вказуєте підряд обидві прошивки: -U flash:w:optiboot_atmega328.hex:i -U flash:w:myfirmware.hex:i

Shaman2 пише:

І ще тоді запитання: при наявності бутлоадера і залочці через lock bit через бутлоадер можно прошивку зляти? В гуглі одні пишуть так, інші пишуть ні

Прошивка сама себе може читати і при бажанні кудись відправити. Можна захистити від читання код бутлоадера з коду користувача - це може бути дійсно корисно. Можна навпаки - код користувача від бутлоадера (мабуть, це мали на увазі ті, хто писав що можна захистити), але це створить лише незручності, бо бутлоадер не зможе перевіряти те, що записав, а скинути лок можна лише стиранням всього флеш через ISP, програмно ніяк.

Неактивний

#24 2024-02-11 20:35:37

Shaman2
Учасник
Зареєстрований: 2024-01-14
Повідомлень: 49

Re: Lock bit на arduino nano

Honey пише:

Прошивка сама себе може читати і при бажанні кудись відправити. Можна захистити від читання код бутлоадера з коду користувача - це може бути дійсно корисно. Можна навпаки - код користувача від бутлоадера (мабуть, це мали на увазі ті, хто писав що можна захистити), але це створить лише незручності, бо бутлоадер не зможе перевіряти те, що записав, а скинути лок можна лише стиранням всього флеш через ISP, програмно ніяк.

І цікаво як? Я знаю один тільки спосіб: заранеє програмувати пару байт в EEPROM і в коді считувати ці байти і звіряти їх з еталоном. Тоді считування самої прошивки без епрома робить її неробочою на інших платах. 
Другий вариант кріптобібліотеки, але це вже інша річ, залишимо це.

Неактивний

#25 2024-02-22 17:47:21

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Lock bit на arduino nano

Shaman2 пише:

В мене драйвер 3.5.2019.1, спробую останній 3.6.2021.12

У мене також версія 3.5.2019.1, але ніяких проблем немає, перемичку не використовую. Проблема, мабуть, в чомусь іншому.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму