我在使用康佳特公司的imx6q的qseven模块,我想在ecspi3的上分别接max14830和MAX7301的spi slave设备,以下是我修改的imx6qdl-qmx6.dtsi文件,但是总不对,能告诉我怎么修改dts文件使能ECSPI3吗,尤其是我需要两个cs信号:
我增加的代码:
&ecspi3 {
fsl,spi-num-chipselects = <2>;
cs-gpios = <
&gpio4 24 GPIO_ACTIVE_LOW
&gpio4 25 GPIO_ACTIVE_LOW
>;
//cs-gpios = <&gpio4 24 GPIO_ACTIVE_LOW>,<&gpio4 25 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ecspi3>;
dmas = <&sdma 7 7 1>, <&sdma 8 7 2>;
dma-names = "rx", "tx";
status = "okay";
max7301:max7301@0{
compatible = "maxim,max7301";
reg = <0>;
spi-max-frequency = <26000000>;
};
max14830: max14830@1 {
compatible = "maxim,max14830";
reg = <1>;
spi-max-frequency = <26000000>;
clocks = <&ref4>;
clock-names = "xtal";
// interrupt-parent = <&gpio3>;
// interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
// gpio-controller;
// #gpio-cells = <2>;
};
};
还增加了:
pinctrl_ecspi3: ecspi3grp {
fsl,pins = <
MX6QDL_PAD_DISP0_DAT2__ECSPI3_MISO 0x100b1
MX6QDL_PAD_DISP0_DAT1__ECSPI3_MOSI 0x100b1
MX6QDL_PAD_DISP0_DAT0__ECSPI3_SCLK 0x100b1
//MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24 0x100b1
//MX6QDL_PAD_DISP0_DAT4__GPIO4_IO25 0x100b1
>;
};
我是否疏忽了其他的地方?
我也遇到了同样问题 ,SPI3_CLK也是没有输出,我也使用SPI3外扩NOR FLASH,请问您是如何解决的
//MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24 0x100b1
//MX6QDL_PAD_DISP0_DAT4__GPIO4_IO25 0x100b1
why you comment out these?
I comment out these because it does not work when I add them ,and from the original file , there is a ecspi1 which works, it looks like this, it doesn't include the cs line signal :
&ecspi1 {
fsl,spi-num-chipselects = <1>;
cs-gpios = <&gpio3 19 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ecspi1>;
dmas = <&sdma 3 7 1>, <&sdma 4 7 2>;
dma-names = "rx", "tx";
status = "okay";
flash: m25p80@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "st,sst25vf032b";
spi-max-frequency = <20000000>;
reg = <0>;
partition@0 {
label = "bootloader";
reg = <0x0000000 0x100000>;
};
partition@100000 {
label = "user";
reg = <0x0100000 0x2fc000>;
};
partition@3fc000 {
label = "reserved";
reg = <0x03fc000 0x4000>;
read-only;
};
};
};
pinctrl_ecspi1: ecspi1grp {
fsl,pins = <
MX6QDL_PAD_EIM_D17__ECSPI1_MISO 0x100b1
MX6QDL_PAD_EIM_D18__ECSPI1_MOSI 0x100b1
MX6QDL_PAD_EIM_D16__ECSPI1_SCLK 0x100b1
>;
};
There should defined the pin as GPIO in dtsi file somewhere. If you not define it, how the system to set the IOMUX setting for the gpio3_19. You can see other dtsi file for reference.
So, you can define it like this.
MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24 0x000b1
MX6QDL_PAD_DISP0_DAT4__GPIO4_IO25 0x000b1
And the cs-gpios should look like this:
cs-gpios = <&gpio4 24 GPIO_ACTIVE_LOW>, <&gpio4 25 GPIO_ACTIVE_LOW>;
Hi,jimmychan:
Thanks for your reply, in fact I have add what you mentioned in the IOMXC section(bold line below), but it did not work , what else should I do?
&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog>;
imx6qdl-qmx6 {
pinctrl_hog: hoggrp {
fsl,pins = <
MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000 /* PCIE_WAKE_B */
MX6QDL_PAD_NANDF_WP_B__GPIO6_IO09 0x80000000 /* I2C multiplexer */
MX6QDL_PAD_GPIO_4__GPIO1_IO04 0x80000000 /* SD2_CD */
MX6QDL_PAD_NANDF_D6__GPIO2_IO06 0x80000000 /* SD4_CD# */
MX6QDL_PAD_NANDF_D7__GPIO2_IO07 0x80000000 /* SD4_WP */
MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000 /* RGMII Phy Interrupt */
MX6QDL_PAD_CSI0_MCLK__CCM_CLKO1 0x80000000 /* Camera MCLK */
MX6QDL_PAD_DISP0_DAT8__WDOG1_B 0x80000000 /* Watchdog output signal */
MX6QDL_PAD_EIM_A25__GPIO5_IO02 0x80000000 /* Q7, GPIO 0 */
MX6QDL_PAD_GPIO_8__GPIO1_IO08 0x80000000 /* Q7, GPIO 1, Rev. C.x */
MX6QDL_PAD_DISP0_DAT5__GPIO4_IO26 0x80000000 /* Q7, GPIO 2 */
MX6QDL_PAD_DISP0_DAT6__GPIO4_IO27 0x80000000 /* Q7, GPIO 3 */
MX6QDL_PAD_GPIO_16__GPIO7_IO11 0x80000000 /* Q7, GPIO 4 */
MX6QDL_PAD_KEY_ROW4__GPIO4_IO15 0x80000000 /* Q7, GPI */
MX6QDL_PAD_KEY_COL4__GPIO4_IO14 0x80000000 /* Q7, GPO 0 */
MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x80000000 /* Q7, GPO 1 */
MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24 0x80000000
MX6QDL_PAD_DISP0_DAT4__GPIO4_IO25 0x80000000
>;
};
pinctrl_audmux: audmuxgrp {
fsl,pins = <
MX6QDL_PAD_DI0_PIN4__AUD6_RXD 0x130b0
MX6QDL_PAD_DI0_PIN15__AUD6_TXC 0x130b0
MX6QDL_PAD_DI0_PIN2__AUD6_TXD 0x110b0
MX6QDL_PAD_DI0_PIN3__AUD6_TXFS 0x130b0
>;
};
pinctrl_ecspi1: ecspi1grp {
fsl,pins = <
MX6QDL_PAD_EIM_D17__ECSPI1_MISO 0x100b1
MX6QDL_PAD_EIM_D18__ECSPI1_MOSI 0x100b1
MX6QDL_PAD_EIM_D16__ECSPI1_SCLK 0x100b1
>;
};
pinctrl_ecspi3: ecspi3grp {
fsl,pins = <
MX6QDL_PAD_DISP0_DAT2__ECSPI3_MISO 0x100b1
MX6QDL_PAD_DISP0_DAT1__ECSPI3_MOSI 0x100b1
MX6QDL_PAD_DISP0_DAT0__ECSPI3_SCLK 0x100b1
//MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24 0x100b1
//MX6QDL_PAD_DISP0_DAT4__GPIO4_IO25 0x100b1
>;
};
is the driver max14830 and MAX7301 up? or any error message?
maybe you can try <&gpio4 24 0> and <&gpio4 25 0> to see what happen.
Hi, jimmychan:
The max14830 and MAX7301 did not up , because the ECSPI3 did not work , I found that there is no clk out , I think it should be the dts config problem, but I do not know how to do it now. In the file imx6q.dtsi, I found this :
iomuxc: iomuxc@020e0000 { | |
compatible = "fsl,imx6q-iomuxc"; |
ipu2 { | ||
pinctrl_ipu2_1: ipu2grp-1 { | ||
fsl,pins = < | ||
MX6QDL_PAD_DI0_DISP_CLK__IPU2_DI0_DISP_CLK 0x10 | ||
MX6QDL_PAD_DI0_PIN15__IPU2_DI0_PIN15 | 0x10 | |
MX6QDL_PAD_DI0_PIN2__IPU2_DI0_PIN02 | 0x10 | |
MX6QDL_PAD_DI0_PIN3__IPU2_DI0_PIN03 | 0x10 | |
MX6QDL_PAD_DI0_PIN4__IPU2_DI0_PIN04 | 0x80000000 | |
MX6QDL_PAD_DISP0_DAT0__IPU2_DISP0_DATA00 0x10 | ||
MX6QDL_PAD_DISP0_DAT1__IPU2_DISP0_DATA01 0x10 | ||
MX6QDL_PAD_DISP0_DAT2__IPU2_DISP0_DATA02 0x10 | ||
MX6QDL_PAD_DISP0_DAT3__IPU2_DISP0_DATA03 0x10 | ||
MX6QDL_PAD_DISP0_DAT4__IPU2_DISP0_DATA04 0x10 | ||
MX6QDL_PAD_DISP0_DAT5__IPU2_DISP0_DATA05 0x10 | ||
MX6QDL_PAD_DISP0_DAT6__IPU2_DISP0_DATA06 0x10 | ||
MX6QDL_PAD_DISP0_DAT7__IPU2_DISP0_DATA07 0x10 | ||
MX6QDL_PAD_DISP0_DAT8__IPU2_DISP0_DATA08 0x10 | ||
MX6QDL_PAD_DISP0_DAT9__IPU2_DISP0_DATA09 0x10 | ||
MX6QDL_PAD_DISP0_DAT10__IPU2_DISP0_DATA10 0x10 | ||
MX6QDL_PAD_DISP0_DAT11__IPU2_DISP0_DATA11 0x10 | ||
MX6QDL_PAD_DISP0_DAT12__IPU2_DISP0_DATA12 0x10 | ||
MX6QDL_PAD_DISP0_DAT13__IPU2_DISP0_DATA13 0x10 | ||
MX6QDL_PAD_DISP0_DAT14__IPU2_DISP0_DATA14 0x10 | ||
MX6QDL_PAD_DISP0_DAT15__IPU2_DISP0_DATA15 0x10 | ||
MX6QDL_PAD_DISP0_DAT16__IPU2_DISP0_DATA16 0x10 | ||
MX6QDL_PAD_DISP0_DAT17__IPU2_DISP0_DATA17 0x10 | ||
MX6QDL_PAD_DISP0_DAT18__IPU2_DISP0_DATA18 0x10 | ||
MX6QDL_PAD_DISP0_DAT19__IPU2_DISP0_DATA19 0x10 | ||
MX6QDL_PAD_DISP0_DAT20__IPU2_DISP0_DATA20 0x10 | ||
MX6QDL_PAD_DISP0_DAT21__IPU2_DISP0_DATA21 0x10 | ||
MX6QDL_PAD_DISP0_DAT22__IPU2_DISP0_DATA22 0x10 | ||
MX6QDL_PAD_DISP0_DAT23__IPU2_DISP0_DATA23 0x10 | ||
>; | ||
}; |
I do not know if the config is right , when I modified them as below ,the kernel cannot start up:
iomuxc: iomuxc@020e0000 { | |
compatible = "fsl,imx6q-iomuxc"; |
ipu2 { | ||
pinctrl_ipu2_1: ipu2grp-1 { | ||
fsl,pins = < | ||
MX6QDL_PAD_DI0_DISP_CLK__IPU2_DI0_DISP_CLK 0x10 | ||
MX6QDL_PAD_DI0_PIN15__IPU2_DI0_PIN15 | 0x10 | |
MX6QDL_PAD_DI0_PIN2__IPU2_DI0_PIN02 | 0x10 | |
MX6QDL_PAD_DI0_PIN3__IPU2_DI0_PIN03 | 0x10 | |
MX6QDL_PAD_DI0_PIN4__IPU2_DI0_PIN04 | 0x80000000 | |
MX6QDL_PAD_DISP0_DAT0__IPU2_DISP0_DATA00 0x12 | /*ECSPI3_SCLK.*/ | |
MX6QDL_PAD_DISP0_DAT1__IPU2_DISP0_DATA01 0x12 | /*ECSPI3_MOSI*/ | |
MX6QDL_PAD_DISP0_DAT2__IPU2_DISP0_DATA02 0x12 | /*ECSPI3_MISO*/ | |
MX6QDL_PAD_DISP0_DAT3__IPU2_DISP0_DATA03 0x13 | /*GPIO4_IO24*/ | |
MX6QDL_PAD_DISP0_DAT4__IPU2_DISP0_DATA04 0x13 | /*GPIO4_IO25*/ | |
MX6QDL_PAD_DISP0_DAT5__IPU2_DISP0_DATA05 0x10 | ||
MX6QDL_PAD_DISP0_DAT6__IPU2_DISP0_DATA06 0x10 | ||
MX6QDL_PAD_DISP0_DAT7__IPU2_DISP0_DATA07 0x10 | ||
MX6QDL_PAD_DISP0_DAT8__IPU2_DISP0_DATA08 0x10 | ||
MX6QDL_PAD_DISP0_DAT9__IPU2_DISP0_DATA09 0x10 | ||
MX6QDL_PAD_DISP0_DAT10__IPU2_DISP0_DATA10 0x10 | ||
MX6QDL_PAD_DISP0_DAT11__IPU2_DISP0_DATA11 0x10 | ||
MX6QDL_PAD_DISP0_DAT12__IPU2_DISP0_DATA12 0x10 | ||
MX6QDL_PAD_DISP0_DAT13__IPU2_DISP0_DATA13 0x10 | ||
MX6QDL_PAD_DISP0_DAT14__IPU2_DISP0_DATA14 0x10 | ||
MX6QDL_PAD_DISP0_DAT15__IPU2_DISP0_DATA15 0x10 | ||
MX6QDL_PAD_DISP0_DAT16__IPU2_DISP0_DATA16 0x10 | ||
MX6QDL_PAD_DISP0_DAT17__IPU2_DISP0_DATA17 0x10 | ||
MX6QDL_PAD_DISP0_DAT18__IPU2_DISP0_DATA18 0x10 | ||
MX6QDL_PAD_DISP0_DAT19__IPU2_DISP0_DATA19 0x10 | ||
MX6QDL_PAD_DISP0_DAT20__IPU2_DISP0_DATA20 0x10 | ||
MX6QDL_PAD_DISP0_DAT21__IPU2_DISP0_DATA21 0x10 | ||
MX6QDL_PAD_DISP0_DAT22__IPU2_DISP0_DATA22 0x10 | ||
MX6QDL_PAD_DISP0_DAT23__IPU2_DISP0_DATA23 0x10 | ||
>; | ||
}; |
I modified above accordding to the data sheet below:
you don't need to modify the imx6q.dtsi.
when the kernel start, the drivers will probe. Is there any message about max14830 and max7301? you can add some printk in the driver to check where is the problem.
Yes , I have add some printk to the driver , but all the regs of the MAX14830 return 0XFF , so I think the SPI did not work .Then I used oscilloscope to see the output of the ECPSI3_SCLK, found nothing!
I thought that there is still some thing wrong with the SPI of the IMX6, what should I do now?