Прошивка flash-памяти 25xxx через программатор USBasp
Микросхемы флеш-памяти eeprom серии 25xxx широко применяются в микроэлектронике. В частности, в современных телевизорах и материнских платах в 25xxx хранится прошивка биоса. Перепрошивка 25xxx осуществляется по интерфейсу SPI, в чем и заключается отличие этих микросхем от флеш-памяти семейства 24xxx, которые шьются по i2c(квадратная шина).
Соответственно, для чтения/стирания/записи 25xxx нужен SPI-программатор. Одним из самых дешевых вариантов программаторов для этой цели является USBasp, который стоит смешные деньги- с доставкой всего около 2$ на ебее. В свое время я купил себе такой для программирования микроконтроллеров. Теперь мне понадобилось прошить не микроконтроллер, а SPI-флеш и решено было им воспользоваться.
Оказалось, что сам по себе USBasp с оригинальной прошивкой такую память не шьет, но отечественный программист с ником Tifa (низкий поклон ему и долгих лет жизни) модернизировал прошивку USBasp специально для обеспечения возможности работы с флеш-памятью. Постоянная ветка обсуждения альтернативной прошивки USBasp от Tifa, связь с автором и ссылки на файлы тут: http://forum.easyelectronics.ru/viewtopic.php?f=17&t=10947
Забегая вперед скажу, что прошивка от Tifa работает, микросхемы 25xxx шьются. Кстати, кроме 25xxx, модифицированный программатор рассчитан на работу с 24xxx и Microwire.
1. Перепрошивка USBasp
Сначала нужно замкнуть контакты J2:
Лично я не просто замкнул, а впаял в контакты переключатель:
При замкнутых контактах J2 (это у меня переключатель в положении вправо) USBasp переходит в режим готовности к перепрошивке.
Сам себя USBap перепрошить не может, поэтому нужен еще один программатор. USBasp как бы оказывается в положении хирурга, который не может сам себе вырезать аппендикс и просит друга помочь. Для перепрошивки USBasp я использовал самодельный программатор AVR910, но для одного раза можно по-быстрому за пару минут спаять программатор «5 проводков», который состоит всего-лишь из одного разъема LPT и 5 резисторов.
Подключаем программатор к USBasp:
Теперь идем на форум альтернативной прошивки от Tifa, в самом верхнем посте находим и качаем архив с последней прошивкой и ПО.
Находим там файл mega8.hex, это и есть альтернативная прошивка для USBasp.
Запускаем CodeVisionAvr (я использую версию 2.0.5), выставляем настройки программатора: Settings-> Programmer.
Устанавливаем настройки записи: Tools->Chip programmer. Выбираем чип Atmega8L, именно такой стоит на USBasp. Фьюзы не выставляем- те, что надо, уже прошиты в чипе. Остальные настройки оставляем по умолчанию.
Стираем старую программу USBasp: Program-> Erase chip.
Открываем файл прошивки mega8.hex: File-> Load flash.
Перепрошиваем USBasp: Program-> Flash.
Если прошла запись и не выдало сообщение об ошибке, значит альтернативная прошивка благополучно прошита в USBasp. Теперь USBasp может не только шить AVR-микроконтроллеры, как раньше, но еще и работать с флеш-памятью. Размыкаем контакты J2, что бы USBasp снова перешел в режим программатора.
Теперь проверим, видит ли Windows 7 x86 этот программатор. Вставляем USBasp в USB и… система пишет «USBasp не удалось найти драйвер». Понятно, нужно установить драйвер. Но драйверов в скачанном на форуме архиве нет, их нужно скачать на родном сайте USBasp тут, оригинальные драйвера подходят и для модифицированного программатора. Скачали, установили, Win7 увидела программатор, все ок. Впрочем, я программирую микроэлектронику на ноутбуке с WinXP, она тоже после установки драйверов видит программатор.
2. Площадка для подключения USBasp к микросхеме 25xxx DIP
Теперь нужно подготовить площадку для программирования 25xxx. Я это сделал на макетной плате по такой схеме:
3. Прошивка микросхем 25xxx через USBasp
Для прошивки 25xxx через модифицированный USBasp используется программа AsProgrammer, которая тоже есть в архиве.
Для примера, поработаем с микросхемой Winbond 25×40. Запускаем AsProgrammer, ставим режим работы SPI и выбираем тип микросхемы: Микросхема-> SPI-> Winbond->…
… и видим, что W25X40 в списке нет. Что же, тогда заполним параметры микросхемы вручную. Находим мануал на Winbond 25X40 и там на странице 4 видим такие параметры:
Эти параметры вносим сюда:
Подключаем USBasp к компьютеру и микросхеме Winbond 25×40:
С помощью кнопок «прочитать», «записать», «стереть», проверяем работу программатора:
Все ок.
Только нужно учесть, что перед тем, как что-то записать в микросхему, сначала нужно выставить: Настройки-> Проверка записи, что бы после записи прошивки в микросхему была выполнена проверка на соответствие того, что писали тому, что в итоге записали. Это немаловажная вещь, потому что если прошивку делать не на очищенный чип, в него запишется чёрт-те что. Поэтому сначала нужно стереть микросхему, а затем только проводить ее запись.
Благодаря прошивке от Tifa дешевый китайский программатор USBasp теперь умеет работать с микросхемами flash-памяти eeprom 25xxx. Теоретически еще может работать c 24xxx и Microwire, но я проверил только работу с 25xxx.
UPD1:
Оказывается, такую же прошивку можно записать и в программатор AVR910. Тогда он тоже будет работать с flash-памятью 25xxx: Программатор ISP памяти из AVR910.
6 применений в «умном доме» платы USBasp. Нестандартное использование USBasp / Habr
Иногда дешевле купить готовое устройство, чем собирать его самому. Да и самодельное устройство не всегда и не у всех будет выглядеть аккуратно- это зависит от наличия оборудования/материалов и прямоты рук.
Пользователи, знакомые с микроконтроллерами Atmel или хотя бы с Arduino скорее всего знают о дешевом программаторе USBasp, цена которого на Ebay около $ 3. Распространены две версии программатора:
USBasp 2.0 — с стабилизатором на 3.3 вольта.
USBasp 3.0 — плата поменьше, без стабилизатора. Так же у него не выведены на разъем порты PD0 и PD1(Аппаратный UART).В руках не держал и соответственно рассматривать его тут не будем.
Ниже мы рассмотрим как превратить программатор USBasp в I2C-USB переходник, научимся читать датчики влажности и температуры, получим простой набор портов ввода/вывода (PIO), RS232-USB, а так же попытаемся создать устройство nRF24L01-USB для чтения беспроводных датчиков и управления устройствами. Ну и для любителей Arduino — будем программировать в среде Arduino IDE используя USBasp как макетную плату.Проекты используют популярную библиотеку V-USB для работы с USB в программной реализации.
Архив с прошивками можно скачать в конце статьи. Я намеренно не публикую тут прямые ссылки на свои проекты -вы их найдете в архиве.
Устройство программатора USBasp
Программатор состоит из небольшого числа деталей. Мозгом программатора является микроконтроллер Atmega8, который имеет всего 8 кб флеш памяти и 1 кб ОЗУ(SRAM).Вроде и слабенький микроконтроллер по современным меркам, но столько всего можно на нем сделать.Из-за особенностей работы программного USB м/к работает на частоте 12мгц. Соответственно, при написании своей прошивки необходимо учитывать это.
USBasp имеет 10 контактный разъем, на который выведены 6 выводов микроконтроллера: PB5 (SCK), PB4 (MISO), PB3 (MOSI, PWM), PB2(PWM), PD0 (RXD), PD1 (TXD).Питание 5в или 3.3в, которое переключается перемычкой JP1.
Плата имеет два встроенных светодиода на выводах PC0 и PC1.Выводы м/к PB0,PB1 и PD2 используются для программного USB,PC2 выведен на перемычку JP3.Остальные выводы микроконтроллера не распаяны.
Со схемой устройства можно ознакомится в архиве в конце статьи.
Установка загрузчика на плату
Для быстрой смены прошивки, без сторонних программаторов можно установить загрузчик USBaspLoader.Официальная страница проекта USBaspLoader
К сожалению загрузчик отнимает 2 кб флеш памяти, но для большинства применений нам хватит оставшихся 6 кб.
Установка загрузчика:
Команда программирования используя Arduino как программатор:
avrdude -c avrisp -P COM1 -b 19200 -p m8 -U flash:w:boot_m8.hex -U hfuse:w:0xc0:m -U lfuse:w:0x9f:m -U lock:w:0x2f:m
Команда программирования через другую USBasp:
avrdude -c usbasp -p m8 -U flash:w:boot_m8.hex -U hfuse:w:0xc0:m -U lfuse:w:0x9f:m -U lock:w:0x2f:m
После этого уже можно заливать свою прошивку без программатора стандартной командой
avrdude -c usbasp -p m8 -U flash:w:имя_файла.hex
Для того, чтобы «залить» прошивку в устройство с установленным USBaspLoader необходимо установить перемычку JP3, которая переводит устройство в режим программирования и сбросить устройство, замкнув контакт ближний к перемычке выбора питания(JP1) на перемычке JP2 на землю.
Использование USBasp как макетную плату в Arduino IDE
Для прошивки в среде Arduino IDE (проверено на версиях 1.0.х) необходимо в файл board.txt вписать следущий текст:
atmega8usb.name=ATmega8 USB 12 MHz atmega8usb.upload.protocol=arduino atmega8usb.upload.maximum_size=6144 atmega8usb.upload.speed=19200 atmega8usb.bootloader.low_fuses=0x9f atmega8usb.bootloader.high_fuses=0xc0 atmega8usb.bootloader.path=atmega8 atmega8usb.bootloader.file=boot_m8.hex atmega8usb.bootloader.unlock_bits=0x3F atmega8usb.bootloader.lock_bits=0x2F atmega8usb.build.mcu=atmega8 atmega8usb.build.f_cpu=12000000L atmega8usb.build.core=arduino atmega8usb.build.variant=standard
После этого в среде Arduino IDE можно выбрать появившуюся плату ATmega8 USB 12 MHz. Прошивка осуществляется через меню «загрузка с помощью программатора».
Доступные пины по нумерации Arduino: 13 (SCK),12 (MISO),11 (MOSI,PWM),10 PB2(PWM) ,1 (TXD),0 (RXD).Так же доступны цифровые выводы 14 и 15 для управления светодиодами на плате.
Можно задействовать и интерфейс USB, используя библиотеку для Arduino V-USB, но возможностей тут меньше, чем на Си.
nRF24L01-USB
Позволяет обмениваться данными между nRF24L01/nRF24LE1 и компьютером с устройством nRF24L01-USB. Теоретически поддерживается до 22 клиентов(при пакете передачи 32 байта) на базе nRF24L01/nRF24LE1, но пока на практике проверено до 3. Ограничение связано с тем, что для приема и отправки данных используется буфер в ОЗУ устройства, а его как известно у Atmega8 всего 1кб.Размер приемного пакета может быть до 32 байт, а отправки — 4 байта, это ограничение связано со способом реализации работы с библиотекой V-USB.
Работа nRF24L01-USB адаптера основана на временном разделении, когда клиенты отправляют/принимают данные в разное время. При большом количестве клиентов время опроса должно быть бОльшим. Для обмена данными в реальном времени количество клиентов должно быть наименьшим. Пока у устройства имеются некоторые недостатки, но думаю это решаемо.
Клиентская утилита управления, чтения и отправки данных работает как в Linux, так и Windows, но пока, к сожалению, требуется компиляция для настройки принятых данных. Для удобства настройки и отладки через утилиту можно менять канал, скорость и включать/выключать аппаратное подтверждение, работать напрямую с регистрами радио модуля.
Устройство можно применить для беспроводных датчиков или управления в системах умного дома.
Кстати, ранее был разработан и испытан вариант беспроводных датчиков влажности и температуры на базе attiny13 на частоте 315 или 433 мгц, но это уже другая тема.
RS232-USB
На основе программатора USBasp можно создать устройство-переходник RS232-USB на базе проекта cdc-232.
Подойдет для программирования плат Arduino, на которых нет микросхемы FT232RL или другого преобразователя usb-uart.
PIO-USB
6 выводов, которые выведены на разъеме программатора могут использоватся как обычные PIO выводы, для «дерганья» светодиодами и релюшками, а так же считывания логического состояния порта. В архиве в конце статьи имеется мой вариант PIO-USB, который так же позволяет считывать датчик влажности DHT11/DHT22, а так же транслировать код для управления розетками/люстрами, если подключить радио перадтчик на 433/315 мгц. Планируется новая версия, в которой увеличится количество подключаемых датчиков влажности и исправлены ошибки.
DS18B20-USB
Программатор можно «научить» работать с несколькими датчиками температуры DS18B20.Например использовать проект USBTemp.
Возможны и другие варианты реализации схемы и прошивки устройства, а так же интеграция с PIO-USB.
К сожалению из-за размера прошивки загрузка не возможна через USBaspLoader.
I2C-USB
Устройство позволяет подключить практически любые устройства i2c к компьютеру.Проверено как на Linux так и в Windows XP.Прошивка основана на известном проекте i2c tiny usb.
Мои примеры использования устройства:
Чтение датчика давления BMP085.
Управление микросхемой расширителем портов MCP23017, получив тем самым почти тот же PIO на компьютере.
Вариантов применения масса: программирование EEPROM памяти, чтение спецефичных разных датчиков, управление FM приемником.
Это конечно же далеко не все варианты использования программатора в нестандартном функционировании.
Все исходные коды сторонних проектов можно найти на их официальных сайтах. В архиве в конце статьи имеются прошивки, которые адаптированы под выводы платы USBasp.
Архив с прошивками: usbasp.zip
UPD: Ещё одно применение USBasp в статье «Программируем nRF24LE1 через Raspberry PI и USBasp».
Востоновление прошивки через usbasp
Хрусталёв НикитаЗагрузка
13.12.2018
772
печатает на Anet A6 Вопросы и ответы Есть плата от принтера Anet A6 программатор usbasp переходник какой то. Как установить любую прошивку через этот программатор? Через какую программу, как подключить провода, что указать в программе? Ответы на вопросыПопулярные вопросы
fan071Загрузка
11.01.2020
824
Начало печати происходит не в центре, а в левом дальнем углу т.е. X 2 Y228 Z0.4 хотя ожидал в центре. При начале печати сопло идет в home позицию и бь…
Читать дальше osvolЗагрузка
22.01.2020
1031
Всем, добрый день. Помоги разобраться владельцы 4 max pro. Печатал разными настройками, ретрактами, температурой. Перебрал хотенд, нарастил и аккуратн…
Читать дальше serz55Загрузка
19.08.2018
4064
нашел четыре недорогих принтера. по описанию только на АНЕТ А6 много инфы а вот на остольные нпочти нету! подскажите какой из переч…
Читать дальшеПревращаем китайский программатор USBISP в USBASP / Блог им. xterro / Сообщество EasyElectronics.ru
Всё началось с того, что купил себе на aliexpress.com вот такой, якобы usbasp программатор:Дешево и сердито, в среднем по 3 бакса за штуку. Но тут всплыла одна особенность этого девайса, он работает как HID устройство, что есть не совсем хорошо.
[ 2597.780102] usb 3-2: new low speed USB device number 2 using ohci_hcd
[ 2597.952186] usb 3-2: New USB device found, idVendor=03eb, idProduct=c8b4
[ 2597.952189] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 2597.952191] usb 3-2: Product: USBHID
[ 2597.952192] usb 3-2: Manufacturer: zhifengsoft
[ 2597.978533] generic-usb 0003:03EB:C8B4.0004: hiddev0,hidraw3: USB HID v1.01 Device [zhifengsoft USBHID] on usb-0000:00:13.0-2/input0
Было не совсем понятно, как его использовать. При работе с avrdude, ни один из программаторов из списка «дудки» не подходил.
После мытарств по просторам интернета и усиленного гугления, был обнаружена страничка www.sciencetronics.com/greenphotons/?p=938 на которой один заморский товарищ столкнулся с такой же проблемой и успешно её решил, поэтому было принято решение последовать его путём.
Путь сводится к тому, что по сути это обычный usbasp, и его можно легко в него превратить, просто перешив микроконтроллер в нём, что и было мною сделано.
Итак, последовательность действий такова:
- Разбираем этот «свисток»(со стороны usb разъёма выковыриваем пластиковую заглушку, вытаскиваем алюминиевый корпус)
- На плате есть два переходных отверстия, помеченные словом «UP», их нужно замкнуть(включаем возможность самопрограммиирования)
- Подключаем к этому свистку другой программатор(я использовал свой старый добрый usbasp) и заливаем в неё прошивку от usbasp-а из приложенного архива
После заливки прошивки, вместо красного светодиода, загорится синий, всё, на этом процесс преобразования завершён. Убираем перемычку с «UP» и далее работаем с ним, как с обычным usbasp-ом 🙂
P.S. Во вложении находится архив с прошивкой(в папке default лежит уже собранный hex). Также этот архив можно скачать на страничке www.sciencetronics.com/greenphotons/?p=938