我在嵌入式Linux设备(olimex imx233 micro)上使用内核3.12.rc4。我的目标是使用/dev/spidev
能够与另一个 spi 设备进行通信。
我arch/arm/boot/dts/imx23-olinuxino.dts
编辑为:
ssp1: ssp@80034000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx23-spi";
pinctrl-names = "default";
pinctrl-0 = <&spi2_pins_a>;
clock-frequency = <1000000>;
status = "okay";
spidev: spidev@0 {
compatible = "spidev";
spi-max-frequency = <1000000>;
reg = <1>;
};
};
arch/arm/boot/dts/imx23.dtsi:
有这个配置
spi2_pins_a: spi2@0 {
reg = <0>;
fsl,pinmux-ids = <
0x0182 /* MX23_PAD_GPMI_WRN__SSP2_SCK */
0x0142 /* MX23_PAD_GPMI_RDY1__SSP2_CMD */
0x0002 /* MX23_PAD_GPMI_D00__SSP2_DATA0 */
0x0032 /* MX23_PAD_GPMI_D03__SSP2_DATA3 */
>;
fsl,drive-strength = <1>;
fsl,voltage = <1>;
fsl,pull-up = <1>;
};
设备绑定看起来正确。当我编译内核时,我得到了/dev/spidev1.1
.之后,我使用 spidev_test.c 并通过示波器监控引脚。SCK和MOSI输出信号正确,但是,即使在数据传输期间,芯片选择也设置为逻辑高电平。
有没有办法确定为什么 spidev 在传输过程中无法设置为逻辑低电平?似乎要么需要在内核上传递其他东西,要么 spidev 上存在无法控制芯片选择的问题。我想知道我是否需要在内核的驱动程序/spi 目录上的 spidev.h 或 spidev.c 上更改任何内容?或者我该如何解决它?
处理器参考手册
我从未使用过设备树,但无论如何我都会尽力帮助你。
内核创建设备/dev/spidev1.1
,因此 spidev 连接到 SPI 总线 1,芯片选择 1。片选编号从0
开始,并且您没有任何其他器件关联到SPI总线1。
据我所知,reg = <1>
告诉SPI内核spidev连接到芯片选择1.,但也许您的设备连接到芯片选择0。所以,reg = <0>