I2C tiny usb: harbaum/I2C-Tiny-USB: Cheap and simple I²C to USB interface

Прошивка MLT-1043S подручными средствами(i2c-tiny-usb) ~ Gentoo on the laptop

Итак задача — запрограммировать EEPROM 24c04 из чипа CRUM картриджа MLT-1043S. Картридж для принтера Samsung ML-1661/1676/1861/1866/1866W.

Имеется девайс i2c-tiny-usb.
Софт, который потребуется: i2c-tools, hexdump, hexedit и самособранный eeprog. Последний ловко качается исходниками и компилируется в свою же папку, при этом никак не интегрируясь в систему и не представляя призрачной угрозы portage.
Далее всё подключаем\зажимаем и проворачиваем следующее:
Убедимся что поддержка программатора есть в ядре:

Device Drivers > I2C support > I2C device interface <*> (to get access through /dev/i2c-X)
Device Drivers > I2C support > I2C Hardware Bus support > Tiny-USB adapter <*>

Загружаем нужные нам модули

modprobe i2c-tiny-usb i2c-dev i2c-core

Проверяем жив ли интерфейс:

i2cdetect -l
i2c-0   i2c             i2c-tiny-usb at bus 002 device 008      I2C adapter

Проверяем, а не висит ли на этом интерфейсе нечто похожее на EEPROM:

i2cdetect 0
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-0. 
I will probe address range 0x03-0x77.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: 50 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Видим 2 устройства — это нормально. 24с04 отражается в память двумя кусками. Последовательность логична — первые 256 байт на первом сегменте, вторые — на втором.

Считаем содержимое в бинарном виде с обоих сегментов собранным eeprog и пишем вывод в файлики:

# ./eeprog -f /dev/i2c-0 0x50 -r 0:256 > dump1
# ./eeprog -f /dev/i2c-0 0x51 -r 0:256 > dump2

Параметры программы:-f = не спрашивать, /dev/i2c-0 = с какого устройства читать, 0x50 = адрес, который мы узнали выше, -r = чтение, 0:256 = диапазон чтения от 0 до 256 байта.
Просмотреть считанное легко и просто используя hexdump -С.
Далее привожу выхлоп своих данных:

# hexdump -C dump1
00000000  01 33 02 39 01 33 2a df  01 61 ab f4 ff ff ff ff  |.3.9.3*..a......|
00000010  00 00 06 c3 ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00000020  00 00 1c 0d ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00000030  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00000100
# hexdump -C dump2
00000000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00000010  ff ff ff ff ff ff ff ff  50 54 31 36 36 43 48 4e  |........PT166CHN|
00000020  ff ff ff ff ff ff ff ff  43 52 55 4d 2d 31 31 31  |........CRUM-111|
00000030  30 30 37 38 31 35 31 33  01 32 de 9f 07 ff ff ff  |00781513.2......|
00000040  02 c7 9a e6 ff ff ff ff  00 01 4c 08 ff ff ff ff  |..........L.....|
00000050  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00000070  0a ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |.
...............| 00000080 a5 a5 a5 a5 50 54 31 36 36 43 48 4e ff ff ff ff |....PT166CHN....| 00000090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| * 00000100

Теперь нам нужно обнулить счётчики и поменять номер картриджа. Делается это в любом HEX-редакторе, например

hexedit -s(включает, ИМХО, более учеловеченное отображение).
Рассмотрим на готовом:

Для первого куска:
00000000 00 00 00 02 ff ff ff ff 00 00 00 00 ff ff ff ff |................|
00000010 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff |................|
00000020 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff |................|
00000030 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00000100
Для второго куска
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
00000010 ff ff ff ff ff ff ff ff 50 54 31 36 36 43 48 4e |........PT166CHN|
00000020 ff ff ff ff ff ff ff ff 43 52 55 4d 2d 31 31 31 |. .......CRUM-111|
00000030 30 30 37 38 33 35 31 33 01 32 de 9f 07 ff ff ff |00783513.2......|
00000040 02 c7 9a e6 ff ff ff ff 00 01 4c 08 ff ff ff ff |..........L.....|
00000050 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00000070 0a ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
00000080 
ff ff ff ff
50 54 31 36 36 43 48 4e ff ff ff ff |....PT166CHN....| 00000090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| * 00000100

Звёздочки, если вы не догадались — повторяющиеся линии файла. В редакторе строк будет несколько большим.
В первом файле мы обнулили счётчики — это первые 3 строки.
Во-втором файле мы изменили версию чипа CRUM, подправив одну цифру. Эта цифра при сбросе чипа будет всегда различаться, и если совпадёт — принтер не примет картридж. В строке |00783513.2……| можно менять всё что угодно, или всё что угодно до точки с двойкой (?).
В строке

00000080 мы убрали все a5 a5 a5 a5. Это, как говорят некоторые особо разбирающиеся люди — прогресс бар.
Всё. Зашиваем обратно:

# cat dump1 |./eeprog -f /dev/i2c-0 0x50 -w 0
# cat dump2 |./eeprog -f /dev/i2c-0 0x51 -w 0

Параметры программы:-f = не спрашивать, /dev/i2c-0 = на какое устройство писать, 0x50 = адрес, по которому писать, -w = запись, 0 = начиная с 0-ого байта.

Вуаля!

6 применений в «умном доме» платы USBasp. Нестандартное использование USBasp / Хабр

Иногда дешевле купить готовое устройство, чем собирать его самому. Да и самодельное устройство не всегда и не у всех будет выглядеть аккуратно- это зависит от наличия оборудования/материалов и прямоты рук.

Пользователи, знакомые с микроконтроллерами 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».

I²C Tiny USB | Мэйнфрейм

I²C Tiny USB
Статус: стабильная
Репозиторий: https://github.com/sre/i2c-tiny-usb/
Автор: sre

5 9 Для системы контроля и доступа и различные частные и космические проекты sre регулярно использует датчики/устройства I²C. В целях тестирования это очень помогает, если эти устройства можно подключить к ноутбуку. До сих пор он либо использовал VGA адаптер (кабели VGA содержат сигнал I²C для передачи DDC дисплея информация. Большинство драйверов графических карт Linux с открытым исходным кодом позволяют пользователям получить доступ к шине i2c на адаптере стандартными средствами). К сожалению новее Аппаратное обеспечение больше не предоставляет адаптеры VGA и/или мультиплексирует разъемы странным образом. таким образом, что больше невозможно использовать порт I²C.

Другой вариант — использовать Bus Pirate, который поддерживает I²C и подключается к ноутбуку через USB. Bus Pirate не поддерживается однако стандартными интерфейсами ядра. это не очень приятно для разработка приложения.

К счастью, ядро ​​поддерживает несколько USB-адаптеров I²C. Большинство из них довольно дорогие в диапазоне 100 евро, но для одного из них требуется только ATtiny85, кристалл и несколько резисторов/диодов. Это проект Тилля Харбаума, который разработал адаптер и предоставляет инструкции по его домашняя страница.

sre взял эту информацию и разработал свою собственную печатную плату, добавив регуляторы напряжения. и логический уровень преобразует для 3,3 В и 1,8 В. Таким образом, можно подключить самые распространенные датчики. легко. Также на печатной плате есть разъем mini USB вместо огромного разъема USB-B.

Конструкция печатной платы позволяет создать красивый корпус типа «сэндвич», как показано на рисунке. ниже (файл для лазерного резака). Верхнюю левую часть можно положить поверх печатной платы. и должен иметь ту же высоту, что и разъем USB. Нижняя правая часть должен располагаться непосредственно под печатной платой и должен иметь высоту не менее кристалл. Затем две другие части можно положить внизу и сверху. две другие части. Результат довольно стабилен и не занимает много места. Это должны быть вырезаны из акрилового стекла или должны быть добавлены этикетки, чтобы знать назначение контактов.

Описание печатной платы

Итак, давайте кратко рассмотрим, как это работает. Ниже приведена схема печатной платы. Это начинается с подтягивающего резистора от USB- к Vcc, который сообщает хосту USB, что мы низкоскоростное устройство. Затем два стабилитрона на данных линии для ограничения напряжения до 3,3 В, чтобы устройство соответствовало USB стандарт. Далее идут блокировочные конденсаторы для нашей ATtiny85. Тогда у нас есть разъем USB, за которым следуют подтягивающие резисторы I²C на SCL и SDA.

В следующем ряду следует ATtiny85 и его кристалл. Также есть согласующие резисторы 68 Ом перед контактами USB. Затем в третьем ряду мы можно увидеть преобразователь логического уровня для SDA и SCL для 1,8 В с использованием BSS138. Следующий к нему MCP1755S-1802E обеспечивает опорное напряжение 1,8 В, которое также доступно с одного из контактов печатной платы. Затем, что не менее важно, последняя строка содержит логический уровень преобразуется в 3,3 В и соответствующий регулятор напряжения (TS1117).

Как видите, настройка оборудования довольно проста. USB-связь есть реализовано в программном обеспечении путем битового удара по контактам ATtiny85, которые подключены к порту USB.

Поддержка драйверов

Хотя мне сказали, что доступны драйверы для Windows и Mac OSX, я сам не проверял эти детали. В Linux драйвер ядра был upstream, и в большинстве дистрибутивов он включен в конфигурации ядра. Как результат работает из коробки. Это можно проверить, загрузив модуль i2c-dev. и с помощью i2cdetect найти нужный адаптер (вам нужно будет сделать следующий за корнем). Получите номер устройства i2c с меткой i2c-tiny-usb. и вы можете сканировать шину на устройства.

modprobe i2c-dev
i2cдетект -l
i2cдетект 8
 

Если это сработает, вы можете начать разработку на своем любимом языке программирования и переключитесь, например, на родной интерфейс I²C Raspberry Pi в любой момент просто изменив номер устройства I²C. Конечно, адаптер также можно использовать для разработки драйверов ядра I²C Linux.

Страница не найдена | Хакадей

Похоже, в этом месте ничего не найдено. Может попробовать одну из ссылок ниже или поиск?

Искать:

Наиболее часто используемые категории

  • Разные хаки (3874)
  • Слайдер (3768)
  • Колонны Хакадея (3832)
  • Новости (3037)
  • хаков для Arduino (2956)
  • Взломы инструментов (2614)
  • классических хаков (2497)
  • Избранное (2474)
  • хаки для 3d принтеров (2,305)
  • взломов роботов (2217)

Архивы

Попробуйте поискать в ежемесячных архивах. 🙂

АрхивВыбрать Месяц Апрель 2023 Март 2023 Февраль 2023 Январь 2023 Декабрь 2022 Ноябрь 2022 Октябрь 2022 Сентябрь 2022 Август 2022 Июль 2022 Июнь 2022 Май 2022 Апрель 2022 Март 2022 Февраль 2022 Январь 2022 Декабрь 2021 Сентябрь 2021 Сентябрь 2021 Октябрь 2021 Октябрь 2021 2021 июнь 2021 Май 2021 Апрель 2021 Март 2021 Февраль 2021 Январь 2021 Декабрь 2020 Ноябрь 2020 Октябрь 2020 Сентябрь 2020 Август 2020 Июль 2020 Июнь 2020 Май 2020 Апрель 2020 Март 2020 Февраль 2020 Январь 2020 Декабрь 2019ноябрь 2019 г. октябрь 2019 г. сентябрь 2019 г. август 2019 г. июль 2019 г. июнь 2019 г. май 2019 г. апрель 2019 г. март 2019 г. февраль 2019 г. январь 2019 г. декабрь 2018 г. ноябрь 2018 г. ноябрь 2017 г. Октябрь 2017 Сентябрь 2017 Август 2017 Июль 2017 Июнь 2017 Май 2017 Апрель 2017 Март 2017 Февраль 2017 Январь 2017 Декабрь 2016 Ноябрь 2016 Октябрь 2016 Сентябрь 2016 Август 2016 Июль 2016 Июнь 2016 Май 2016 Октябрь 2015 г. Сентябрь 2015 г. Август 2015 г. Июль 2015 г. Июнь 2015 г. Май 2015 г. Апрель 2015 г. Март 2015 г. Февраль 2015 г. Январь 2015 г. Декабрь 2014 г. Ноябрь 2014 г. Октябрь 2014 г. Сентябрь 2014 г. Август 2014 г. Июль 2014 г. сентябрь 2013 г. август 2013 г. июль 2013 г. июнь 2013 г. май 2013 г. апрель 2013 г. март 2013 г. февраль 2013 г. январь 2013 г. декабрь 2012 г. ноябрь 2012 г. октябрь 2012 г. сентябрь 2012 г. август 2012 г. июль 2012 г. август 2011 г. Июль 2011 г. Июнь 2011 г. Май 2011 г. Апрель 2011 г. Март 2011 г. Февраль 2011 г. Январь 2011 г. Декабрь 2010 г. Ноябрь 2010 г. Октябрь 2010 г.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *