Как управлять устройством чтения SD-карт с помощью spidev

У меня есть ноутбук Samsung RF711 Core i7 под управлением Debian Wheezy со встроенным USB-устройством чтения флэш-памяти, но этот вопрос может относиться к любой системе с устройством чтения SD-карт через USB-порт. Вот что говорит lsusb

Шина 004 Устройство 004: ID 058f:6366 Alcor Micro Corp. Multi Flash Reader

Я хочу использовать старую SD-карту и припаять к ней несколько проводов, чтобы она могла связываться с PIC через SPI, когда я подключаю ее к порту SD-карты.

Я знаю, что напряжение SD-карты составляет 3,3 В и что для взаимодействия с устройством SPI 5 В потребуется преобразователь уровня напряжения.

Я скомпилировал собственное ядро ​​для создания модуля ядра spidev, что теперь? Я знаю, что это как-то связано с правилами udev, usb_modeswitch? но я не вижу леса за деревьями.

В идеале решением будет программа, назовем ее sdcard-spi. Когда программа запускается, она переворачивает драйверы и создает spidev-устройство в /dev. Когда он выходит, он восстанавливает функциональность слота, чтобы снова иметь возможность читать SD-карты. Это может быть процесс-демон — при его запуске слот преобразуется, а при остановке слот снова преобразуется в устройство чтения SD-карт.

Кажется, что авторы spidev могли легко это сделать, так как SD-карты изначально зондируются в режиме SPI.

Просто для ясности: я хочу открыть устройство чтения SD-карт в режиме SPI, чтобы никакая карта не обнаруживалась, и я мог осуществлять связь SPI, используя узел устройства spidev, скажем, /dev/spidev.0.


person Philip Ashmore    schedule 26.08.2014    source источник


Ответы (1)


Вы не можете сделать это, написав драйвер Linux.

Вам бы переписать прошивку картридера. Внутри кард-ридера есть синхронный последовательный интерфейс, но интерфейс между кард-ридером и компьютером с Linux — это не последовательный интерфейс общего назначения, а USB-накопитель.

person Ben Voigt    schedule 26.08.2014
comment
Э, нет. Запоминающего устройства нет, пока вы не вставите SD-карту в слот, после чего правила udev оживут и создадут узлы устройств для разделов на SD-карте. - person Philip Ashmore; 27.08.2014
comment
@PhilipAshmore: На самом деле, он сообщается как профиль запоминающего устройства, но со статусом «Отсутствие носителя». Не то, чтобы была какая-то разница, если бы устройство не перечислялось без карты. Вы по-прежнему не можете отправлять произвольные передачи SPI, только команды USB-накопителя, которые декодируются прошивкой считывателя. - person Ben Voigt; 27.08.2014
comment
USB-устройства Pic (microchip.com/pagehandler/en-us/ technology/usb/home.html) может обмениваться данными по SPI с SD-картами, поэтому я мог просто использовать одну из них (у меня в пути 3 образца PIC18F14K50-I/P). Ядро linux сопоставляет идентификатор устройства с модулем ядра, поэтому разные правила udev не будут сопоставлять устройство с usb_storage, определяя его как устройство, которое может использовать модуль spidev. - person Philip Ashmore; 28.08.2014
comment
Другим аспектом, который следует учитывать, являются деревья устройств (devicetree.org/Main_Page), но я не Я знаю достаточно, чтобы продолжить. - person Philip Ashmore; 28.08.2014
comment
Просто для ясности, я говорю об изменении того, как ядро ​​​​распознает SD-карту READER, а не SD-карту, вставленную в ридер. У него есть контакты, как и у вышеупомянутых PIC, и когда SD-карта вставлена, он использует SPI для согласования более быстрого режима связи с картой. - person Philip Ashmore; 28.08.2014
comment
@philip: Ты просто не понимаешь, не так ли? Вы не можете использовать spidev со своим считывателем, потому что считыватель не принимает команды конфигурации SPI. Только команды запоминающего устройства USB. Вы не можете получить доступ к отображаемым в памяти регистрам ввода-вывода внутри считывателя из ядра Linux на хост-компьютере. Такой уровень доступа есть только у прошивки на собственном процессоре читалки. - person Ben Voigt; 28.08.2014
comment
Думаю, я надеялся, что устройство чтения SD-карт будет чем-то вроде PIC, но да, даже тогда, если оно не настроено на разрешение SPI на его контакты, это невозможно. Я надеялся, что согласование протокола вместе с переключением протоколов выполнялось модулем ядра. lsusb сообщает о моем устройстве как о Multi Flash Reader Alcor Micro Corp., но это устройство присутствует только тогда, когда у меня есть SD-карта в слоте, поэтому что-то добавляет и удаляет ее. - person Philip Ashmore; 29.08.2014