Доступ к EEPROM
- Войдите на сайт для отправки комментариев
Сб, 04/10/2014 - 21:52
Правильно ли я понимаю, что IDE Arduino не имеет функции работы с EPROM микроконтроллера? То есть для загрузки данных в EEPROM с компьютера надо либо писать код в скетче и программу для PC, либо заливать EEPROM с помощью ISP программатора? Или же есть способ это сделать с помощью бутлодера adruino? Спасибо.
arduino ide не может. либо скетч или через isp
Шьется через ISP - avrdude опция -U
Только что нашел следующее (http://freeduino.ru/arduino/sample_EEPROM.html):
Работа с EEPROM через boot-loader
При обмене данными с ПК загрузчик использует протокол stk500v1, и может работать, в том числе и с EEPROM.
Для чтения содержимого EEPROM в файл «0.bin» необходимо в командной строке
avrdude -q -C ..\etc\avrdude.conf -p m168 -c stk500v1 -P COM3 -b 19200 -U eeprom:r:0.bin:r
Для записи содержимого файла 0.bin в EEPROM команда такая:
avrdude -q -C ..\etc\avrdude.conf -p m168 -c stk500v1 -P COM3 -b 19200 -U eeprom:w:0.bin
Параметр «COM3» нужно заменить на Ваш номер порта.
Или через usbasp и http://khazama.com/project/programmer/
avrdude -q -C ..\etc\avrdude.conf -p m168 -c stk500v1 -P COM3 -b 19200 -U eeprom:r:0.bin:r
Для записи содержимого файла 0.bin в EEPROM команда такая:
avrdude -q -C ..\etc\avrdude.conf -p m168 -c stk500v1 -P COM3 -b 19200 -U eeprom:w:0.bin
Параметр «COM3» нужно заменить на Ваш номер порта.
Господа, подскажите, эти строки работают? А то у меня ничего не получается...
столько плясок с бубном.
проще и правда всё перевести в цифру для скетча и залить в еепром.
Необходимо менять значения в EEPROM без смены скетча....
Вообще то в avr-gnuc - это тулкит который использован и в Atmel студии и в ардуино IDE для eeprom предусмотрены специальный артибуты компилятора и линкера
Если включить файл avr/eeprom.h и потом использовать макрос EEMEM типа:
то после компиляции будет создан файл с расширением .eep содержащий HEX для заливки EEPROM. Данные присвоенные такой переменной во флэш не попадут, а попадут именно в файла для заливки EEPROM. Я в студии этим активно пользуюсь. Но вот создает ли такой файл ардуина - вопрос
механизм удобный еще и потому, что не нужно заниматься самому распрпеделением памяти EEPROM, адреса компилятор определяет сам. В моем примере &bits - вернет адрес в EEPROM, в случае если у нас одна EEPROM переменная то это будет 0
https://arduino.ru/forum/programmirovanie/dostup-k-eeprom#comment-83601
Не выходит аленький цветочек. пишет:"-q" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
По папкам ходить научился(я молодец:), но либо что-то не дописано(смущают точки после С) либо не до конца описаны действия, типа для разбирающихся - само собой разумеющееся:(
Команда “..\folder1” означает «выйти на директорию выше а потом в папку войти в папку “folder1”. Например, сначала были тут “C:\temp”, потом будем в “C:\folder1”
П'нятненько. Сыпасиба. Т.е. построение команды типа правильное, а не работает из-за кривых рук. Непонятен факт выполнения (точнее НЕ выполнения) команды из одной папки, что бы тут же войти в другую. Типа там что -то важное для начала беседы?
В любом случае спотыкается прямо на первом символе "-q". Вот бы кто-нибудь знающий проверил работоспособность(смущённый смайлик).
Команда “..\folder1” означает «выйти на директорию выше а потом в папку войти в папку “folder1”. Например, сначала были тут “C:\temp”, потом будем в “C:\folder1”
Вот и подтверждение теории, что разбирающиеся пропускают само собой разумеющееся и неофитам тупо побуквенно повторить без шансов:) Попробовал "..\folder1" - ругается, а сделал "cd..\folder1" - заработало. Сложна:(
Вот я дебил. Упорно набирал строку без начального "avrdude"
Вроде сдвинулось с мёртвой точки, но программатор не отвечает
avrdude: stk500_recv(): programmer is not responding
покажи всю командную строку
avrdude -q -C ..\etc\avrdude.conf -p m328p -c stk500v1 -P COM4 -b 19200 -U eeprom:r:0.bin:r
Заменил "m168" типа думаю так правильней.
avrdude -q -C ..\etc\avrdude.conf -p m328p -c stk500v1 -P COM4 -b 19200 -U eeprom:r:0.bin:r
Заменил "m168" типа думаю так правильней.
UNO шьётся на 115200 и пробел при настройке скорости порта убери, и -patmega328p
"Огласите весь список, пжалста"(С)
А слона то я и не приметил. Учитывая недавние обсуждения о скорости обмена и фюзах:) могло бы и дойти.
В любом случае ни скорость ни -patmega328p не повлияли - нет ответа от программатора. Пробел с какой стороны?
avrdude -q -C ..\etc\avrdude.conf -patmega328p -c stk500v1 -P COM4 -b115200 -U eeprom:r:0.bin:r
ты шьёшь через программатор или через UART?
Через программатор любой дурак сможет, даже я:) Через конвертер на плате на 16U2. Кстати китайская на CH(без опознавательных знаков) перестала даже пытаться шиться после замены на "-patmega328p", не видит сигнатуру.
:)
Можно сразу в TXT сохранять. Правда такая хрень получается:)
”\ ”n ”n ”n ”n ”n ”n ”n ”n ”n ”n ”n ”n ”n ”n ”n ””n ”n ”n ”n ”n ”n ”n ”n ”n $ ' * % ( + @Ђ $ѕПпШаЮїНї!а а±аА’©0Ібч”]”М” блра$‘нйра”‘йирад‘о#Йр"#9р#0сЁф!0с"0)сраояоXяOҐ‘ґ‘/·ш”м‘Ѓ&Ађ•ћ#њ“/ї•'0©р(0Йр$0Iч ‘Ђ /}А ‘Ђ /w “Ђ ЯП$µ/w$ЅЫП$µ/}ыП ‘° /w “° ТП ‘° /}щПћ+ЪП?·ш”Ђ‘ђ‘ ‘°‘&µЁ›А/?р–Ў±?їє/©//€'јНbqЃ‘Bаfw€™J•Сч•Џ’џ’Ї’ї’П’Я’п’я’”ё K\„пИ.Э$У”б,с,”ё hy Љ › h>s@Ѓ‘Ёу!аВСбс€о€ѓаЎ±БСбс)чяђпђЯђПђїђЇђџђЏђ•’’¶’$/“?“Џ“џ“Ї“ї“Ђ‘ђ‘ ‘°‘0‘ #а#-7Xх–Ў± “ Ђ“ђ“ “°“Ђ‘ђ‘ ‘°‘–Ў±Ђ“ђ“ “°“ї‘Ї‘џ‘Џ‘?‘/‘ђѕђђ•&и#–Ў±ТПx”„µ‚`„Ѕ„µЃ`„Ѕ…µ‚`…Ѕ…µЃ`…ЅЂ‘n Ѓ`Ђ“n ’Ѓ Ђ‘Ѓ ‚`Ђ“Ѓ Ђ‘Ѓ Ѓ`Ђ“Ѓ Ђ‘Ђ Ѓ`Ђ“Ђ Ђ‘± „`Ђ“± Ђ‘° Ѓ`Ђ“° Ђ‘z „`Ђ“z Ђ‘z ‚`Ђ“z Ђ‘z Ѓ`Ђ“z Ђ‘z ЂhЂ“z ’Б нйра$‘йира„‘€#™рђа€™ьиYяOҐ‘ґ‘ьоXяO…‘”‘Џ·ш”м‘в+м“ЏїАаРаЃа”p ”Э Ђа”p ”Э —Ўу” сПш”яПяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя
И чё теперь с этим делать:)
Кстати с китайской платой то же работает. Версия IDE 1.8.12
а теперь залей в дуню код и посмотри, что там в реальности:
Да пустая она, сам лично стирал. Но первые 4 строки чёй-то не по порядку.
"Всё чудесатее и чудесатее"(С)
А эта строка точно еепром читает? Хоть в логах и пишет о "avrdude: reading eeprom memory:", но что то есть сомнения.
Стер полностью контроллер через CodeVisionavr и самолепный avrisp mkii. Залил загрузчик и-и-и-и в текстовом файле теперь только куча яяяяяяяяяяя(считать сколько их там не стал) PS ровно 1024:)
тебя ничем не проймёшь! Это тебя ни грамма не смутило:
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: safemode: Fuses OK (E:FD, H:DE, L:FF)
avrdude done. Thank you.
Фюзы видел. ХЗ почему не читаются. В реальности они установлены.
А открыть сторонней программой бины и я могу. Мог:) Сейчас что-то и не найду где есть отображение содержимого и можно в ручную поменять.
Возможно это всё изобретение лисапеда и есть готовые функции. Основная идея это считать еепром с компа, изменить отдельные значения и затолкать обратно. Опыта и знаний по созданию программ для винды нет, потому начал ковыряться в процессинге. Да - да, в том самом мёртворождённом. Набросал оболочку, научился считывать с текстовых файлов копию еепром с разделителем",". Ну и посетила мысль убрать лишнее звено типа SD карты > считать образ > перенести на комп.
оно не только фьюзы не читает но и дамп читает неверно, подумал, может дело в загрузчике, в UNO это оптибут, он всего 512 байт, может что-то из протокола STK500v1 выкинули, подоткнул чистую нано со старым загрузчиком, такая же песня
Через программатор читается, то-есть автор статьи или заблуждается или у него какой-то свой загрузчик используется
яяя это в ASCII и есть FF FF FF, - значит EEPROM пустая (стёртая)
Да это то понятно, что типа транслитерация. Использовать то как это? на все значения буков не хватит:) и разделения нет.
Да это то понятно, что типа транслитерация. Использовать то как это? на все значения буков не хватит:) и разделения нет.
это жеж дамп памяти, в ячейках десятичное значение от 0 до 255, как хочешь так и используй
Может я всё усложняю, но как отсчитать условно четвёртую "я" и это хорошо если это будет именно "я" а не "¶"(хз что это такое)
Повторюсь может я это всё усложняю, а при считывании сформированного файла из процесстинга и сохранении в массив будет что то адекватное. Как говорит граф:" будем есть слона по частям". Можно продолжить здесь или переползать в мега популярный раздел?
Почему у тебя тут:
“r” это ж чтение (read), а ты ж вроде бы записать хочешь (write), так? )
смотри #3
Основная идея это считать еепром с компа, изменить отдельные значения и затолкать обратно.
Запись это на сладкое. Читать вроде научились , осталось запихнуть в процессинг, проанализировать, изменить нужные ячейки и уже потом будем разбираться с записью:)
не читает оно через бутлоадер, точнее читает хрень те что
Я тут подумал... А не проще через UART в EEPROM писать/читать? Напиши свои функции чтения и записи и посылай им команды/принимай от них.Чем это не подходит?
Э-э-э... А чем мы тут по вашему второй день занимаемся?
Ну точно не тем же самым, о чем я имел ввиду, говоря выше.)))
Serial знаешь как работает? Вот я о нем...
А вы тут два дня с бубном вокруг прямого доступа через дудку к EEPROM пляшете.)
Я тут подумал... А не проще через UART в EEPROM писать/читать? Напиши свои функции чтения и записи и посылай им команды/принимай от них.Чем это не подходит?
Тогда уточняю: вы предлагаете написать скетч, залить его и потом общаться с контроллером, а он уже там сам будет читать/шить еепром. Так ?
Совершенно верно. Но только не отдельный скеч писать, а дописать этот функционал в том, что должен там работать изначально. Надеюсь понятно выразился.
Идея понятна и где то верна, но вся прелесть в том что можно взять любую плату и поменять в ней значения в памяти. Доступа к исходному скетчу может и не быть. Да и сериал отъедает ресурсы.
Не понятно по какому принципу данные EEPROM менять не зная исходного кода скеча)))
Ну да ладно, мое дело предложить - Ваше отказаться. Обмен «любезностями» завершён. Буду следить за успехами.
Идеи - это хорошо, а хорошие идеи -вааааще отлично.(почти по классике:)
Получается то, как видите, кривовато и нестабильно. Судя по всему если во флеш есть программа(кроме загрузчика), то читает с мусором даже на свеже стёртой. Ну или я не тем открываю. На полностью стёртой по SPI и восстановленным загрузчиком - типа норм. Но как её запихнуть в просессинг ещё не нашёл. Докопался до exec(cmd), но пока глухо.
не читает оно через бутлоадер, точнее читает хрень те что
А должно? А поддержка есть в буте? Отож!
не читает оно через бутлоадер, точнее читает хрень те что
А должно? А поддержка есть в буте? Отож!
так я об этом еще в посте #28 говорил, так как автор этой затеи утверждает, что оно работает хотелось бы увидеть под каким бутлоадером...
PS Программаторы STK500v1-v2 на жабе даже через вэбморду работают
что-то какие-то мудовые страдания....
Если дудка умеет читать ЕЕПРОМ - значит это будет работать.
Вывод - осталось найти мануал к дудке и вдумчиво прочитать.
что-то какие-то мудовые страдания....
Если дудка умеет читать ЕЕПРОМ - значит это будет работать.
Вывод - осталось найти мануал к дудке и вдумчиво прочитать.
Не, это метод "научного тыка". Применяется теми, кто не умеет в даташиты. :)
ИМХО. Мануал не поможет , если эту возможность не сделали в загрузчике.
Если дудка умеет читать ЕЕПРОМ - значит это будет работать.
три минуты поиска в гугле...
Открываем ардуино ИДЕ, подключаем Ардуину (у меня Нано). Берем первый поавшийся скетч, компилируем прошиваем. Смотрим на выхлоп Ардуино ИДЕ
Вот эта строчка нам и нужна! - все что после -D просто меняем на
Это чтобы параметры не подбирать, а сразу взять заведомо рабочие.
Получаем
Запускаем:
ищем в текущем катлоге файл myfile.hex
ЕЕПРОМ прочитан
Читал через USB без программатора, через бут
Конфиг:
Ардуино ИДЕ 1.8.3
Ардуино Нано atmega328 Old bootloader
и прямые руки...