在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个时钟。
还望各位大神能够指点一二,在此先谢过了。。。。。。。