一 丶配置SPI和I2C
msm8953使用spi和i2c主要是配置它的dtb,一些以msm8953为基础的平台上已经为你配置好了I2C和spi,你只需要使能就行了。没有配置的,需要自己去配置,下面提供两个参考,如何配置msm8953的SPI和DTB:
https://blog.csdn.net/weixin_36274916/article/details/52703604
https://blog.csdn.net/xuecz1230/article/details/92809340#comments
注: msm8953.dtsi (添加节点) msm8953-pinctl.dtsi(引脚配置),它们位于 KERNEL/arch/arm64/boot/dts/qcom中。KERNEL为内核根目录。
一些以msm8953为基础的平台已经配置好了SPI和I2C,但与上面两篇文章讲的有一点不同的是自己节点信息上多了“status="disabled"”,也就是它并没有使能,因为I2C和SPI有引脚复用,而dtb里面又配置了,所以默认不使能。所以此平台提供了一个使能的dtsi,名为msm8953-mtp.dtsi。例如我使能spi6,
&spi_6{
status = "ok"
}
这样就能避免引脚冲突,在原理图中可以知道,spi3和i2c3就引脚冲突了,但在msm8953-mtp.dtsi里面就只使能了i2c3。
经过上述设置,你就可以在/sys/class/spi_master中看到如下:
二丶使用SPI和I2C
spi和i2c都可以通过write/read来操作,那前提是/dev下得有相应的节点。在上节配置后,在msm8953-mtp.dtsi中使能了,在/dev下面会出现i2c设备节点,比如:
现在我们可以直接open("/dev/i2c-2")来对它进行操作了。但是经过上述配置,在/dev下面并不会出现spi设备节点,可以:
① 修改msmcortex_defconfig:将 SPIDEV选项 = y(原先是m)
② 修改msm8953-mtp.dtsi :
&spi6{
status = "ok";
spidev@0{
compatible = "spidev";
reg = <0>;
spi-max-frequency = <5000000>;
#address-cells = <1>;
#size-cells = <1>;
};
}
这样,就在/dev下产生spi节点了:
来源:https://blog.csdn.net/qq_35141454/article/details/100774858