想把RK3128的SPI作为master去读取从设备的数据。 我编写了下面一段代码,但是在spi的cs,clk,mosi和miso任何一个引脚上都没有检测到电平变化!
所用的引脚为
,7,8,9,10四个引脚。
有/dev/spi_misc_test设备存在!
代码如下
int
main(int argc, char **argv) {
int fd, ret;
char filename = “/dev/spi_misc_test”;
uint32_t SPEED = 0;
uint8_t bits_per_word = 0, mode = 0, lsb = 0;
uint8_t command[2] = {0};
uint8_t recv [2] = {0};
spi_pin_mux();
int status;
fd = open(filename, O_RDWR);
if (fd < 0) {
printf("%s open failed!\n", filename);
}
//set settings
SPEED = 400000;
lsb = 0;
bits_per_word = DEFAULT_BITS_PER_WORD;//16;
ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &SPEED);
ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits_per_word);
ret = ioctl(fd, SPI_IOC_WR_MODE, &mode);
ret = ioctl(fd, SPI_IOC_WR_LSB_FIRST, &lsb);
struct spi_ioc_transfer msg;
memset(&msg, 0, sizeof(msg));
msg.tx_buf = (unsigned long)txbuf;
// is it need to set rx_buf ?
msg.len = len;
msg.speed_hz = speed_hz;
msg.delay_usecs = delay_usecs;
msg.bits_per_word = bits_per_word;
msg.cs_change = (uint8_t)cs_change;
while(1)
{
ret = ioctl(fd, SPI_IOC_MESSAGE(1), &msg);
}
}
请问,这段代码在RK3128上不适用么?
!(file:///C:\Users\tt\AppData\Roaming\Tencent\Users\78477602\QQ\WinTemp\RichOle\AYA2[QEA]K3M}SU(]B`5%NA.png)
那个不是ioctl的接口,具体你可以去看看 drivers/spi/spi-rockchip-test.c
madman 发表于 2016-1-31 16:22
那个不是ioctl的接口,具体你可以去看看 drivers/spi/spi-rockchip-test.c
谢谢
madman
我看到了这个文件,
static const struct file_operations spi_test_fops = {
.write = spi_test_write,
};
只有一个write函数, 我这样写对不对?
- int fd =open(“/dev/spi_misc_test”, O_RDWR);
2 write(fd,buf,100);
还是没有任何输出,请指点,谢谢
具体的实现在 static ssize_t spi_test_write(struct file *file, const char __user *buf, size_t count, loff_t *offset)里,你看你的数据有没有写下去,读写函数应该是这些,你可以先试一下这些函数能不能正常使用先
86 ret = spi_write(spi, txbuf, 256);^M
87 ret = spi_read(spi, rxbuf, 255);^M
88 ret = spi_write_then_read(spi,txbuf,254,rxbuf,253);^M
89 ret = spi_write_and_read(spi,txbuf,rxbuf,252);^M
90 ret = spi_write_and_read(spi,txbuf,rxbuf,251);^
然后你可以自己去改写这接口的功能
madman 发表于 2016-1-31 16:57
具体的实现在 static ssize_t spi_test_write(struct file *file, const char __user *buf, size_t count, …
为什么这个printk没打印出来
static ssize_t spi_test_write(struct file *file,
const char __user *buf, size_t count, loff_t *offset)
{
u8 nr_buf[8];
int nr = 0, ret;
int i = 0;
struct spi_device *spi = NULL;
char txbuf[256],rxbuf[256];
printk(“%s:0:bus=0,cs=0; 1:bus=0,cs=1; 2:bus=1,cs=0; 3:bus=1,cs=1; 4:bus=2,cs=0; 5:bus=2,cs=1\n”,func);
有打印的,不过printk是打印在内核里,你可以接串口或者在adb里cat /proc/kmsg查看内核信息
<4>[ 206.665676] spi_test_write:0:bus=0,cs=0; 1:bus=0,cs=1; 2:bus=1,cs=0; 3:bus=1,cs=1; 4:bus=2,cs=0; 5:bus=2,cs=1
madman 发表于 2016-1-31 17:45
有打印的,不过printk是打印在内核里,你可以接串口或者在adb里cat /proc/kmsg查看内核信息
[ 206.665676 …
我们这个是不是没有配置成spi模式,而是其他模式,所以spi没有数据发送出来
![]()
<4>[ 130.231837] spi_test_write:0:bus=0,cs=0; 1:bus=0,cs=1; 2:bus=1,cs=0; 3:bus=1,cs=1; 4:bus=2,cs=0; 5:bus=2,cs=1
<4>[ 130.231846] spi_test_write:error g_spi_test_data is null
<4>[ 130.231855] spi_test_write:0:bus=0,cs=0; 1:bus=0,cs=1; 2:bus=1,cs=0; 3:bus=1,cs=1; 4:bus=2,cs=0; 5:bus=2,cs=1
<4>[ 130.231863] spi_test_write:error g_spi_test_data is null
madman 发表于 2016-2-1 12:52
data is null 数据是空
能不能给个SPI的demo程序,通过spi读写外设的!