This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

求助,用am3352芯片,内核使用3.2.0,SPI通信,使用内核自带的spidev驱动,还有应用程序spidev_test.c,读数据不稳定

Other Parts Discussed in Thread: AM3352

求助,用am3352芯片,内核使用3.2.0,使用内核自带的spidev驱动,还有应用程序spidev_test.c,实现spi通信,读取的芯片是陀螺仪芯片crm100,发送命令是6个字节:28 00 00 00 00 D7,但返回来的数据是不正常的。后来用示波器看了mosi引脚输出(也就是主CPU发送给从机芯片的信号),看到发送过去的波形,每隔一个字节(也就是8位),就会有一个间断拉高,不知道是不是每个字节发送会有间隔,使用ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);函数发送,现在数据返回不正常,不知道是不是因为发送的每个字节数据有间隔,造成从芯片识别数据错误,是spidev驱动有问题吗?还是硬件引起的毛刺?  请大神们帮帮忙啊  急啊!!

  • SPI test这个应用程序只是一个最简单的测试程序,实际应用也要看你的SPI设备所要求的工作时序是什么,看看要不要对应修改SPI的驱动层。

  • 您好:

          看到您是TI的员工,我满心喜悦,您一定有着大神的实力!!我这边现在有几个疑问?

    1、335x配置里面的spi1_d0和spi1_d1哪一个是spi的输出和输入,为什么名称是d0和d1?两个都可以设置为输入输出吗?为什么默认的spi配置都将时钟spi1_sclk、spi输入输出、spi片选信号spi1_cs0都设置为输入AM33XX_INPUT_EN??不是应该输入就配置为输入,输出就配置为输出吗??

    2、AM33XX_PULL_ENBL、AM33XX_PIN_OUTPUT、AM33XX_PULL_UP、AM33XX_PIN_INPUT_PULLDOWN、AM33XX_PIN_OUTPUT_PULLUP这些引脚的功能可以在哪里查看到他们的对应功能,都有些什么不同吗??

    3、现在我的问题是选择用spi的片选引脚spi1_cs0功能,但是好像无法正常驱动芯片,而我把这个引脚配置成普通IO的方式,置高低电平去控制从机芯片就正常了,是spi的片选引脚spi1_cs0驱动电流不够?还是spi1_cs0的配置不对啊?我的配置是这样的:

    static struct pinmux_config spi1_pin_mux[] = {
    {"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
    | AM33XX_INPUT_EN},
    //spi's direction seems reverse from the reference. our test confirm that.
    {"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
    | AM33XX_PULL_UP | AM33XX_INPUT_EN},

    {"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
    | AM33XX_INPUT_EN},

    {"mcasp0_ahclkr.spi1_cs0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
    | AM33XX_PULL_UP | AM33XX_INPUT_EN},
    {NULL, 0},
    };

    spi1_cs0配置为AM33XX_INPUT_EN这样对吗?我试过配置为AM33XX_PIN_OUTPUT,但也是不行。到底怎么样的配置才正确啊??

    难道335x的spi引脚有缺陷??

    问题有点多,恳求细心查看,能够一一回复我,让我能从这片迷雾中释然清醒……小弟不胜感激啊!!

  • 引脚功能请参考AM335x TRM的Figure 5-94。

    现在SDK里的SPI配置都是按照SPI FLASH去配置的,这块验证功能是没有问题的。也有客户用SPI连接过FPGA,需要在底层配置改些东西。

  • 你好:

            我现在正在使用am3352中spi通讯,主要是am3352和fpga通过spi进行通讯,am3352作为从设备,fpga作为主设备,

    请问一下内核自带打驱动能不能实现这种通信方式? spi slave怎么配置?

    static struct pinmux_config spi1_pin_mux[] = {
        {"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
                                | AM33XX_INPUT_EN},
        {"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_PULL_UP
                                | AM33XX_INPUT_EN},
        {"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
                                | AM33XX_INPUT_EN},
        {"mcasp0_ahclkr.spi1_cs0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_PULL_UP
                                | AM33XX_INPUT_EN
                                    },
        {NULL, 0},
    };

    以上是我配置的管教,需不需要做写其他设置?

    恳求细心查看,回复我,…小弟不胜感激啊!!

  • 你好:

            我现在正在使用am3352中spi通讯,主要是am3352和fpga通过spi进行通讯,am3352作为从设备,fpga作为主设备,

    请问一下内核自带打驱动能不能实现这种通信方式? spi slave怎么配置?

    static struct pinmux_config spi1_pin_mux[] = {
        {"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
                                | AM33XX_INPUT_EN},
        {"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_PULL_UP
                                | AM33XX_INPUT_EN},
        {"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
                                | AM33XX_INPUT_EN},
        {"mcasp0_ahclkr.spi1_cs0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_PULL_UP
                                | AM33XX_INPUT_EN
                                    },
        {NULL, 0},
    };

    以上是我配置的管教,需不需要做写其他设置?

    恳求细心查看,回复我,…小弟不胜感激啊!!

  • 你的SPI slave 模式配置好了吗? TI都不带理会这个问题的