IMX6Q怎么使用ECSPI3的两个片选

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

IMX6Q怎么使用ECSPI3的两个片选

3,633 Views
markhello
Contributor I

我在使用康佳特公司的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

                        >;

                };

我是否疏忽了其他的地方?

Labels (1)
0 Kudos
9 Replies

2,145 Views
amylee
Contributor I

我也遇到了同样问题  ,SPI3_CLK也是没有输出,我也使用SPI3外扩NOR FLASH,请问您是如何解决的 

0 Kudos

2,145 Views
jimmychan
NXP TechSupport
NXP TechSupport

                               //MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24             0x100b1

                                //MX6QDL_PAD_DISP0_DAT4__GPIO4_IO25             0x100b1

why you comment out these?

0 Kudos

2,145 Views
markhello
Contributor I

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

                        >;

                };

0 Kudos

2,145 Views
jimmychan
NXP TechSupport
NXP TechSupport

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>;

0 Kudos

2,145 Views
markhello
Contributor I

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

                        >;

                };

0 Kudos

2,145 Views
jimmychan
NXP TechSupport
NXP TechSupport

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.

0 Kudos

2,145 Views
markhello
Contributor I

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:

2016-06-29 09-57-11屏幕截图.png

2016-06-29 09-55-19屏幕截图.png

2016-06-29 09-55-46屏幕截图.png

2016-06-29 09-55-58屏幕截图.png

2016-06-29 09-56-08屏幕截图.png

0 Kudos

2,145 Views
jimmychan
NXP TechSupport
NXP TechSupport

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.

0 Kudos

2,145 Views
markhello
Contributor I

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?

0 Kudos