SPI драйвер, поиск с чего начать - PullRequest
3 голосов
/ 05 июня 2019

Я новичок в разработке Android, но я хочу написать драйвер SPI для подключения ИС SPI, а затем приложение Android для отправки и получения данных от и до ИС.

Оттуда я действительно не знаю, где создать драйвер (и что он должен содержать) и как связать приложение поверх этого.У меня есть настраиваемое ядро ​​Android (9.0 Pie, APQ8096_LA.UM.7.5.r1-03100-8x96.0_P_v5.0 ) со всеми его .dts, .dtsi, .c и так далее.Я также получил eval доску и соответствующую документацию для картирования.

Я гуглил неделю и не нашел то, что искал.Я немного узнал о системе дерева устройств.Поскольку у меня есть Snapdragon 820 msm8996, я изменил «msm8996-blsp.dtsi» и «msm8996-pinctrl.dtsi».У меня был этот бит кода:

msm8996-pinctrl.dtsi

&soc {
...
    spi_0 {
        spi_0_active: spi_0_active {
            spi_0 {
                pins = "gpio0", "gpio1", "gpio2", "gpio3";
                function = "blsp_spi1";
                drive-strength = <6>;
                bias-disable;
            };

        };

        spi_0_sleep: spi_0_sleep {
            spi_0 {
                pins = "gpio0", "gpio1", "gpio2", "gpio3";
                function = "blsp_spi1";
                drive-strength = <6>;
                bias-disable;
            };
        };
    };
...          

msm8996-blsp.dtsi

&soc {
...
    spi_0: spi@7575000 { //QUP Base address for BLSP1_QUP0
        compatible = "qcom,spi-qup-v2"; //Manufacturer and Model
        #address-cells = <1>;
        #size-cells = <0>;
        reg-names = "spi_physical", "spi_bam_physical";
        reg = <0x07575000 0x600>,
        <0x07544000 0x2b000>;
        interrupt-names = "spi_irq", "spi_bam_irq";
        interrupts = <0 95 0>, <0 238 0>;
        spi-max-frequency = <5000000>; //Maximum supported frequency in HZ
        qcom,infinite-mode = <0>;
        qcom,use-bam; // Enable BAM mode
        /* Add BAM pipes */
        qcom,bam-consumer-pipe-index = <12>;
        qcom,bam-producer-pipe-index = <13>;
        qcom,ver-reg-exists;
        qcom,master-id = <86>;
        qcom,use-pinctrl;
        pinctrl-names = "spi_default", "spi_sleep";
        pinctrl-0 = <&spi_0_active>;
        pinctrl-1 = <&spi_0_sleep>;
        clock-names = "iface_clk", "core_clk";
        clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,
        <&clock_gcc clk_gcc_blsp1_qup1_spi_apps_clk>;
        status = "enabled";
    }
...

Я собираю это ядро ​​с помощью

$ ./build.sh msm8996 -j $(nproc)

Я прошил eval board с помощью fastboot, а затем зашел в adb.

$ adb root
$ adb wait-for-device
$ adb shell
# cd /sys/class/spi_master
# ls
// Nothing here

Учитывая, что мой spi-адрес определен в @ 7575000,Я ожидал, что результат будет

# spi_0

Правильно ли мой код, чтобы включить его (я не очень хорошо разбираюсь в дереве устройств)?Если так, то почему не видно с ADB и как я должен сделать его видимым?Какими должны быть следующие шаги для доступа к этому SPI с помощью приложения для Android?

Я искал stackoverflow и так много мест, но написание драйверов устройств для Android, похоже, не является распространенным ...

...