TI中文支持网
TI专业的中文技术问题搜集分享网站

uboot下am335x spi与MCU通信读数据全0

在uboot下采用SPI与MCU通信,在MCU侧通过cw调试,发现uboot下通过spi写数据到MCU正常,而通过SPI读数据,则发现读到的数据全为0。

spi写代码如下:

 dev =(0X1 << 1) | 0X0;
    val = 0x12345678;
    memset(&senddata,0,sizeof(senddata));
    memcpy(&senddata[0],&dev,2);
    memcpy(&senddata[2],&val,4);
    bitlen = sizeof(senddata)*8;
    dout = &senddata;    din = NULL;
       if(spi_xfer(spi1, bitlen, dout, din,SPI_XFER_BEGIN | SPI_XFER_END) != 0)
    {
        printf("1 Error during SPI transaction\n");
        return;
    }  

 

但是,读spi数据就会出现全0,读代码如下所示:

dev =0x55aa;
    val = 0x12345678;
    memset(&senddata,0,sizeof(senddata));
    memcpy(&senddata[0],&dev,2);
    memcpy(&senddata[2],&val,4);
        memset(&recdata,1,sizeof(senddata));
    bitlen = sizeof(senddata)*8;
    dout = NULL;
    din = &recdata;
    udelay(30000);
         printf("test 3\n");

         #if 1
    if(spi_xfer(spi1, bitlen, dout, din,SPI_XFER_BEGIN | SPI_XFER_END) != 0)
    {
        printf("3 Error during SPI transaction\n");
        return;
    }

 

可以确定的是mcu侧的spi配置和通信没有问题。因为我通过内核的spi接口,读写mcu数据都正常。

读数据还尝试过将din和dou全部赋值,让spi_xfer调用底层的omap3_trxr接口,也存在同样的问题。

通过示波器抓波形,发现传输的数据也是错误的,但是不是为0,并且调用trtx接口传输数据的时候,发送

6个字节的数据,只接收到8个时钟,丢了其中的5个时钟。

 

还望各位大神能够指点一二,在此先谢过了。。。。。。。

 

Steven Liu1:

看你上面的描述,是内核下可以正常工作,但是uboot下现在不正常是吧。而且是收不正常,发正常。

你需要明确一点,uboot和kernel下面对这部分的配置是独立开的,uboot会进行一次配置,kernel也会再次初始化。这部分经常忽略的一个因素就是pinmux的配置,你确定在uboot下面你所使用的接收通道pinmux的配置是正确的吗?有没有配置成为正确的模式?是否有打开receive enable?

建议通过control module寄存器的相关地址查验pinmux的设置是否正常。

wrty:

你好,看到你的帖子,通过内核的spi接口,读写mcu数据都正常。

请问一下你的SPI怎么设置的,我通过Linux用户空间读写mcu数据都不正常,你的SPI驱动pin_MUX怎么设置的?用户空间的程序怎么写的?我是用的Linux文档中的SPI使用示例实验的

谢谢!

Jian Zhou:

回复 wrty:

对于Linux空间下的SPI设备读写部分,请参考下下面这个帖子,比较有代表意义:

http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/p/70989/170742.aspx#170742

wrty:

回复 Jian Zhou:

谢谢,确实很有用

赞(0)
未经允许不得转载:TI中文支持网 » uboot下am335x spi与MCU通信读数据全0
分享到: 更多 (0)