Skip to main content
USB-to-SPI bridge

[WiP] Использование моста USB-to-SPI MCP2210 в Линукс

Введение

   Задача состояла в том, чтобы из под десктопного линукса иметь возможность работать с SPI-интерфейсом внешних чипов, притом желательно это делать стандартным механизмом через устройство /dev/spiХ, причем решить эту задачу максимально беспроблемно без свистопляски с пересбором ядра и дров, а поскольку, если это не SBC (Single Board Computer), а десктопное детище архитектуры x86 без набортного контроллера SPI Master, то от соблазна подобрать что-то из конвертеров SPI-to-USB никуда не деться, а их существует некоторое количество.

Кандидаты USB-to-SPI 

•  CP2130 от Silicon Labs

•  MCP2210 от Микрочипа

•  FT232H от FTDI (или что-то иное подходящее от FTDI) 

   В итоге гонку выиграл MCP2210, хотя под CP2130 тоже имелись какие-то варианты решения:  https://www.silabs.com/documents/public/software/CP2130_SDK_Linux.zip и  https://github.com/Henneberg-Systemdesign/cp2130 .

MCP2210

   Некто Daniel Santos разработал линукс-драйвер для этого моста, базирующийся в то же время на более раннем драйвере https://github.com/MathewKing/mcp2210-linux от Mathew King. На данный момент драйвер умеет отправлять и получать ответы для большинства настроечных команд (настройка параметров шины SPI, управление чипом, и т.д.), чтения/записи пользовательского EEPROM и отправки/приема непосредственно сообщений SPI. Однако надо учитывать, что при работе через спецификацию устройства spidev многие вызовы через ioctl не поддерживаются и захардкожены с помощью функции fake_config().

   Без знания заранее конфигурации платы (схемотехники) с чипом MCP2210 автонастройка SPI невозможна. MCP2210 может быть сконфигурирована при начальном запуске скрипта настройки (индивидуальная настройка каждой линии ввода-вывода), для хранения этих настроек на стороне устройства идеально подходит пользовательский EEPROM размером 256 байт. Система авто-конфига получила название Creek, все настройки за исключением имени драйвера протокола и прочих строковых переменных занимают для хранения 5 байт EEPROM. Минорный функционал настроек реализован через вызовы ioctl из пользовательского окружения.

Установка

Шаг 1

Установка ядра 4.15 (ядро называется kernel-ml, доступно в репозитарии elrepo-kernel) на CentOS 7.

Шаг 2

Сборка и установка драйвера mcp2210 под linux:

 Установка правил UDEV и скрипта, который перепривязывает к конкретному устройству новый драйвер:

 Шаг 3

Тест драйвера:

 Считывание конфига:

 Материалы

Все изменения в udev-rules, создающие девайс, доступный из-под пользователя, доступны в моём форке: https://github.com/iDoka/mcp2210-linux

Читать далее

Работа из под линукса с UART-портом

Настройка окружения

Выясняем какие USB-to-COM преобразователи доступны в системе:

Настройка прав доступа из под обычного пользователя:

либо пользуемся механизмом udev, для чего нам понадобится положить по пути /etc/udev/rules.d файл такого содержания (с расширением *.rules):

— в примере прописаны  VID&PID микросхем-преобразователей FT232R и СР2102. После сохранения файла необходимо добавить пользователя в группу plugdev (если он еще не добавлен):

И перезачитать содержимое правил в директории /etc/udev/rules.d:

(далее…)

Читать далее

CrossOver: Запуск программ Windows на Linux

Установка

Поиск и установка зависимостей, обращаю внимание среди зависимостей есть и 32битные:

 

(далее…)

Читать далее

bash: советы и шпаргалки

Архивация в несколько потоков

Понадобилось по работе делать снапшоты несколько-GB-тных логов и нетлистов прогонов синтеза под ПЛИС, есть несоклько архиваторов использующих многопоточность/многоядерность, попробовал pbzip2, установим:

Сама строка из мейкфайла:

тут делаем tar’ом из нескольких файлов один и передаем в pbzip2, конечный файл называем текущей датой, именем проекта и текущей веткой гита, подробнее про опции pbzip2:

  • 7 — степень компрессии 1..9(лучше,медленне),  по факту — размер блока 7 = 700 КБ
  • force — перезаписать если файл уже существует
  • read — означает зачитать входной файл в ОЗУ и там разбить по процессорам
  • m2000 — сколько оперативки в МБ использовать. 2ГБ — это практический максимум
  • p16 — принудительное задание сколько ядер юзать

(далее…)

Читать далее

nginx: советы и шпаргалки

Настройки безопасности

Чтобы не светить версии nginx и php делаем следующее: в файле /etc/nginx/nginx.conf в секции http дописываем:

а в файле /etc/php.ini дописываем:

Рестартуем сервисы:

Проверяем командой:

(далее…)

Читать далее

[CLI] Работа с изображениями в линуксе

ImageMagick: однострочники

Узнать размеры изображения

По вертикали:

По горизонтали:

Склейка нескольких картинок в один файл

Склеить все изображения в директории в матрицу 2х2 по 4 изображения:

Склеить 2 изображения в столбец 1х2 (по вертикали):

Склеить 2 изображения в строку 2х1 (по горизонтали):

Подписать каждое изображение в коллаже именем файла:

  • -geometry +10+10 — белые поля вокруг каждого изображения, заданные в пикселях
  • -frame 10 — 3D-рамка, пиксели
  • -label %f — подпись

Рассово-верный резайс картинок

(далее…)

Читать далее

[Maria|My]SQL: советы и шпаргалки

Настройка /etc/my.cnf

Установка профайлера и анализатора настроек:

Запуск:

После запуска и анализа структур и производительности БД следует обратить внимание на замечания, начинающиеся с символов [!!] (например, на число фрагментированных таблиц) и на раздел Recommendations.

Пример:

(далее…)

Читать далее