佚名通过本文主要向大家介绍了read and write,read write,look read and write,read and write翻译,readwritethink等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: linux SPI下调用write写,但用read得到的值为0问题
描述:
解决方案1:
描述:
采用kernel\Documentation\spi\ spidev_test.c测试SPI的自发自收,spidev_test.c通过下面函数实现收发,测试OK,但我改为用write()写,用read来读,但读取到的全为0,不知道为什么?
static void tda8007_transfer(int fd)
{
int ret;
uint8_t tx[] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x40, 0x00, 0x00, 0x00, 0x00, 0x95,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xDE, 0xAD, 0xBE, 0xEF, 0xBA, 0xAD,
0xF0, 0x0D,
};
uint8_t rx[ARRAY_SIZE(tx)] = {0, };
struct spi_ioc_transfer tr = {
.tx_buf = (unsigned long)tx,
.rx_buf = (unsigned long)rx,
.len = ARRAY_SIZE(tx),
.delay_usecs = delay,
.speed_hz = speed,
.bits_per_word = bits,
};
ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
if (ret < 1)
pabort("can't send spi message");
for (ret = 0; ret < ARRAY_SIZE(tx); ret++) {
if (!(ret % 6))
puts("");
printf("%.2X ", rx[ret]);
}
puts("");
}
解决方案1:
,用示波器观察,spi调用read()函数读从设备时,其还会向从设备写0x00,所以到的都是0
解决方案2:两块板子都与共地么?spi 发送和读数据就是一个回环,主机给从机提供时钟,你自己试着按着按着时序读下对应引脚的时序是不是你发送的数据,还有你可以把spi时钟调低一点,主从时钟最好匹配下
解决方案3:确认你在读miso时,mosi上是你发送的数据。
解决方案4:自发自收不需要clk信号的,你测用示波器测试下相关的引脚时序图
解决方案5: 还没解决?
试试这个例子:
http://www.cnblogs.com/sankye/p/3955630.html