如何在Linux Kernel 4.4使用spi

固件类型:自行编译的固件
SDK包名称:kernel-rk3128-firefly
SDK修改内容:kr3128-fireprime.dts
&spi0 {
status = "okay";
max-freq = <30000000>;
spidev@00 {
compatible = "rockchip,rk3288-spi";
reg = <0x00>;
spi-max-frequency = <30000000>;
spi-cpha = <1>;
//spi-cpol = <1>;
};
};
/drivers/spi/spidev.c
#ifdef CONFIG_OF
static const struct of_device_id spidev_dt_ids = {
{ .compatible = "rohm,dh2228fv" },
{ .compatible = "lineartechnology,ltc2488" },
{ .compatible = "rockchip,spidev" },
{ .compatible = "rockchip,rk3288-spi" },
{},
};
MODULE_DEVICE_TABLE(of, spidev_dt_ids);
#endif
Log日志:firefly-rk3128.txt

我想在firefly-rk3128使用spi
dts文件中有新增spi配置,並在/dev目錄有出現設備節點(spidev32766.0 )
使用linux原有測試程式/Documentation/spi/spidev_test.c進行測試
執行命令: ./spidev_test -l -s 30000000 -b 8 -p 12 -v

使用示波器連接SPI_CLK腳位可以測量到其波形,但是無法測量到SPI_TXD腳位的波形
確認過rk312x.dtsi中gpio腳位設定無誤,不知道哪裡出了問題

spi0_clk: spi0-clk {
rockchip,pins = <1 RK_PB0 1 &pcfg_pull_default>;
};
spi0_tx: spi0-tx {
rockchip,pins = <1 RK_PB1 1 &pcfg_pull_default>;
};

tchip_askquestions
firefly-rk3128.txt (57.1 KB)

問題已解決,dts設定gpio腳位與其他功能相冲導致spi功能無法使用

過程中碰到另一個問題,spi0_clk配置<1 RK_PB0 1 &pcfg_pull_default>
在rk3128 datasheet中顯示GPIO1_B0如要配置為SPI_CLK應設為<1 RK_PB0 3 &pcfg_pull_default>
以<1 RK_PB0 3 &pcfg_pull_default>進行配置spi0_clk,在示波器量測時無反應,詢問此狀況發生的原因