我是Android开发人员的新手,但我想编写一个SPI驱动程序以连接SPI IC,然后编写一个Android应用程序以从该IC发送数据和从该IC接收数据。
从那里,我真的不知道在哪里创建驱动程序(以及它应包含的内容)以及如何在上面链接应用程序。我有一个可定制的Android内核(9.0 Pie,APQ8096_LA.UM.7.5.r1-03100-8x96.0_P_v5.0)及其所有.dts,.dtsi,.c等。我还获得了评估板和用于映射的足够文档。
我用谷歌搜索了一个星期,没有找到我想要的东西。我了解了一些有关设备树系统的知识。由于我拥有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)
我用fastboot刷新了评估板,然后进入adb。
$ adb root $ adb wait-for-device $ adb shell # cd /sys/class/spi_master # ls // Nothing here
考虑到我的spi地址定义为@ 7575000,我希望输出为
# spi_0
我的代码是否正确才能启用它(我对设备树还不满意吗?如果是这样,为什么在adb中不可见?我应该如何使其可见?使用Android应用程序访问此SPI的下一步应该是什么?
我搜索了stackoverflow和这么多地方,但是为Android编写设备驱动程序似乎并不常见...
我是Android开发人员的新手,但我想编写一个SPI驱动程序以连接SPI IC,然后编写一个Android应用程序以从该IC发送数据和从该IC接收数据。从那里,我真的不知道...
您无需为Snapdragon编写SPI驱动程序,因为它已经在内核中。也许您需要编写一些内容以将其连接到设备。