Чтение/запись устройства SPI

Вопрос задан: 3 года назад Последняя активность: 1 год назад
up 1 down

(Я действительно не уверен, какие теги применять, так извинения заранее, если я выбрал неправильные.)

Я надеюсь, что это не слишком глупый вопрос, но я действительно потерял здесь.

Клиент предоставил мне Atmel SAMA5D2 Xplained доска с Linux4SAM играть с. Я пытаюсь интерфейс интерфейс SPI на него, но я понятия не имею, с чего начать.

Чтобы было ясно, я использовал подобные доски (не именно этот один) голый металл. Я также использовал Linux на протяжении многих лет и написал несколько простых драйверов устройств несколько лет назад. И все-таки я потерял.

dmesg | grep spi дает мне следующий вывод:

[    1.840000] atmel_spi f8000000.spi: version: 0x311
[    1.840000] atmel_spi f8000000.spi: Using dma0chan0 (tx) and dma0chan1 (rx) for DMA transfers
[    1.850000] atmel_spi f8000000.spi: Using FIFO (16 data)
[    1.860000] atmel_spi f8000000.spi: Atmel SPI Controller at 0xf8000000 (irq 32)
[    1.860000] m25p80 spi32766.0: at25df321a (4096 Kbytes)

Из этого я делаю вывод, что драйвер загружен, и что он настроен на использование DMA. Тем не менее, глядя на /dev/ нет ничего, что выглядит как устройство SPI (я ожидал найти что-то вроде /dev/spidev или же /dev/spi32766.0 или похожие.)

Означает ли это, что нет никакого фактического драйвер устройства загружается? Должен ли я написать один для того, чтобы использовать SPI?

Если я смотрю на Makefile в исходном дереве Linux4SAM, Я вижу вокруг линии 1171, что ядро ​​не поддерживает загрузку модулей. Означает ли это, что я должен перекомпилировать ядро, включив в свой новый драйвер? Это, кажется, глупый подход; почему обеспечивая распределение Linux, если я не могу получить доступ к аппаратному обеспечению с ним?

Что я здесь отсутствует? (Я чувствую себя довольно глупо...)

EDIT Чтобы был ясен: я хочу, чтобы получить доступ к внешнему интерфейсу SPI, который будет подключен к какому-либо внешнему устройству. Я думаю, что m25p80 некоторая внутренняя флэш-память; Я не заинтересован, чтобы читать/писать там.

2 ответа

Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.

Реклама

up 1 down

spidev это стандартный драйвер устройства Linux, который только экспортирует низкий уровень API, чтобы Userspace с помощью интерфейса/Dev

если вы хотите получить доступ к конкретному клиенту SPI (подчиненный) вы должны написать свой драйвер в соответствии с Linux SPI модели драйвера:

static const struct of_device_id myspi_dt_ids[] = {
{ .compatible = "xxxx,yyyyy" },
{},

static struct spi_driver xxx_spi_driver = {
.driver = {
    .name =     "myspi",
    .owner =    THIS_MODULE,
    .of_match_table = of_match_ptr(myspi_dt_ids),
},
.probe =    myspi_probe,
.remove =   myspi_remove,

например определить spi_driver-структуру of_device_id-структуру обратных вызовов (крюки), и зарегистрировать его. Вы должны привязать его к DT узлу с строкой совместимой собственности.

            [email protected] {
            compatible = "xxxx,yyyyy";
            spi-max-frequency = <5000000>;
            reg = <0>;
        };

во-вторых,

совместимы = "Linux, spidev";

Linux отбивает с помощью этого совместимых свойств, поскольку узлы должны описывают реальные устройства HW не в пользовательском пространстве абстракции

up 0 down accepted

@ 0andriy поставил меня на правильный путь. Я должен был добавить SPI ресурс в дереве устройств и прошить компиляции устройства Дерево Blob к доске. (Так как я не знаю, о деревьях устройств вообще, эта информация очень трудно найти...).

Теперь у меня есть /dev/spidev32765.0. Я добавил это в дереве устройств:

        spi1: [email protected] {
            pinctrl-names = "default";
            pinctrl-0 = <&pinctrl_spi1_default>;
            status = "okay";

            [email protected] {
                compatible = "linux,spidev";
                spi-max-frequency = <83000000>;
                reg = <0>;
            };
        };

        [email protected] {
            pinctrl_spi1_default: spi1_default {
                pinmux = <PIN_PD25__SPI1_SPCK>,
                     <PIN_PD26__SPI1_MOSI>,
                     <PIN_PD27__SPI1_MISO>,
                     <PIN_PD28__SPI1_NPCS0>;
                bias-disable;
            };
        };

Хотя я читал, что добавление [email protected] это на самом деле не то, что нужно сделать (я действительно вижу в dmesg выход "spidev spi32765.0: багги DT: spidev перечислены непосредственно в DT").

Теперь, если я бегу spidev_test она по-прежнему не работает (тайм-аута), но я предполагаю, что это еще вопрос.

Ошибка 505

Что-то пошло не так

Попробуйте воспользоваться поиском