[嵌入式linux] Imx6q Linux 3.0.35 SPI 驱动传输问题

[复制链接]
 楼主| ach_dmatek 发表于 2015-9-8 10:15 | 显示全部楼层 |阅读模式
关于Linux 核心SPI驱动传输速率的问题,请大神帮助解困。
SPI初始化设置CLK位10MHz,使用示波器也可以测试得到10MHz的波形。我在使用read函数去读spi从设备的数据,发现只有2MHz,与前边设置的10M差别很大。有尝试把CLK增大到20M,发现read的速率也就变成了4M左右。貌似是5倍的样子。这是怎么回事。
read函数如下:
static int htpa82_read(struct spi_htpa82 *spi_s, u16 *value)
{
        int err;

        struct spi_transfer        xfer = {
                        .rx_buf                = &spi_s->spi_rx,
                        .len                = 2,
                        .bits_per_word        = 16,
                };
       
        struct spi_message        msg;

        spi_message_init(&msg);

        spi_message_add_tail(&xfer, &msg);
       
        err = spi_sync(spi_s->spi, &msg);
        if (err) {
                dev_err(&spi_s->spi->dev,"%s: failed, value: %x, error: %d\n",__func__, value, err);
                return err;
        }

        *value = spi_s->spi_rx;
        return 0;
}
 楼主| ach_dmatek 发表于 2015-9-8 10:58 | 显示全部楼层
没有人答复,自己先解释一下。理论上说,一个clk会产生一个数据,那么读数据和clk就是同步的。目前的结果是读数据有延时的情况存在,为什么会存在延时就希望大神指导一下。
 楼主| ach_dmatek 发表于 2015-9-8 19:21 | 显示全部楼层
难道就没有对SPI比较熟悉的吗? FSL的FAE是否可以帮解答呢?我的设备是imx6dl双核CPU。
mini1986 发表于 2015-9-10 13:32 | 显示全部楼层
看看读写速率,有个参数可以设置......
 楼主| ach_dmatek 发表于 2015-9-10 17:55 | 显示全部楼层
mini1986 发表于 2015-9-10 13:32
看看读写速率,有个参数可以设置......


你指的是这个参数的设置吗,目前设置为max_speed_hz = 10000000.   也就是10MHz大小。
mini1986 发表于 2015-9-11 08:53 | 显示全部楼层
SPI_IOC_RD_MAX_SPEED_HZ和SPI_IOC_WR_MAX_SPEED_HZ两个......
 楼主| ach_dmatek 发表于 2015-9-11 16:47 | 显示全部楼层
mini1986  2015-9-11 08:53
SPI_IOC_RD_MAX_SPEED_HZ和SPI_IOC_WR_MAX_SPEED_HZ两个......


这两个都是宏定义吧。具体大小还要看应用给传参的大小。默认还是max_speed_hz,即初始化默认最大的值。这个和给spi_transfer结构体设置speed_hz的大小原理一样吧。
 楼主| ach_dmatek 发表于 2015-9-11 17:47 | 显示全部楼层
spi_async与spi_sync区别是什么?
 楼主| ach_dmatek 发表于 2015-9-14 18:07 | 显示全部楼层
最新发现,使用SPI读数据,读一个16位的数据和读一个32位的数据所使用的时间差不多。所以可以通过一次多读几位就可以加快读的速度。
mini1986 发表于 2015-9-15 16:06 | 显示全部楼层
你好好看看关于SPI的ioctl相关的东西吧......
你读16bit和你读32bit,你用示波器看看,读32bit的时间肯定是读16bit的2倍,只是在应用层,你感觉差不多......
l0p0c 发表于 2015-9-15 16:52 | 显示全部楼层
既然clk是10MHz,那你说的2M应该是8bit的频率。这样,10MHz / 8 ≈ 2M
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

178

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部