Нам потребуется 30 минут времени, паяльник, и внешний модуль Catalex-Micro-SD-Card-Module стоимостью 5 штук за 300 рублей — и вопрос снят.
Вот пошаговое руководство, как добавить SD-кард ридер на BFK3.1. Всё описываемое опробовано на практике. Использовался самый свежий на данный момент SDK 4.16, размещенный на официальном сайте «Байкала». В SDK версии 4.14 и младше это работать не будет.
Шаг первый.
Берём модуль Catalex MicroSD-Card.
Для того, чтобы работало определение наличия карты в слоте (Card Detection) нужно сделать следующее: первый пин (CD/DAT3) слота карты подтянуть к плюсу 3V3 через резистор 4К3. Вот тут схема.
Принцип работы следующий: высокий уровень на первом пине слота карты означает, что карта в слоте отсутствует, низкий уровень сигнализирует, что карта вставлена.
Шаг второй.
Дальше мы подключаем внешний модуль к разъему XP25 на плате BFK3.1
Шаг третий.
Добавляем mmc в дерево устройств в текстовом редакторе в файл baikal/src/kernel/arch/mips/boot/dts/baikal/baikal_bfk3.dts
Вот пример описания устройства в dts файле:
&spi1 { num-cs = <1>; cs-gpios = <&portb 2 GPIO_ACTIVE_LOW>; /*<&porta 17 GPIO_ACTIVE_HIGH>;*/ status = "okay"; mmc@0 { status = "okay"; compatible = "mmc-spi-slot"; spi-max-frequency = <10000000>; reg = <0>; voltage-ranges = <3200 3400>; /*gpios = , ;*/ gpios = <&porta 17 GPIO_ACTIVE_LOW>; /*non-removable;*/ disable-wp; };
Шаг четвёртый.
Собираем ядро и образ командой ./usr/scripts/build-boot-img.sh bfk3 -a
Шаг четвёртый.
Прошиваем плату командой sudo dfu-util -a 0 -D
, указывая путь, по которому находится собранный образ. В нашем случае это sdk_4.16/img/bfk3.rom
Вуаля, всё работает.
Вот как это происходит. Включается служба, работающая с sd/mmc, она разбирает параметры из dts, настраивает spi, подключает прерывания к Card Detection.
При обнаружении в слоте SD-карточки эта служба производит ее подключение.
Затем в dev появляется новое устройство.
Если карточку вынуть, то драйвер зафиксирует это и удалит устройство.
Источник