打印
[嵌入式linux]

Imx6q Linux 3.0.35 SPI 驱动传输问题

[复制链接]
2110|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
看看读写速率,有个参数可以设置......

使用特权

评论回复
5
ach_dmatek|  楼主 | 2015-9-10 17:55 | 只看该作者
mini1986 发表于 2015-9-10 13:32
看看读写速率,有个参数可以设置......


你指的是这个参数的设置吗,目前设置为max_speed_hz = 10000000.   也就是10MHz大小。

使用特权

评论回复
6
mini1986| | 2015-9-11 08:53 | 只看该作者
SPI_IOC_RD_MAX_SPEED_HZ和SPI_IOC_WR_MAX_SPEED_HZ两个......

使用特权

评论回复
7
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的大小原理一样吧。

使用特权

评论回复
8
ach_dmatek|  楼主 | 2015-9-11 17:47 | 只看该作者
spi_async与spi_sync区别是什么?

使用特权

评论回复
9
ach_dmatek|  楼主 | 2015-9-14 18:07 | 只看该作者
最新发现,使用SPI读数据,读一个16位的数据和读一个32位的数据所使用的时间差不多。所以可以通过一次多读几位就可以加快读的速度。

使用特权

评论回复
10
mini1986| | 2015-9-15 16:06 | 只看该作者
你好好看看关于SPI的ioctl相关的东西吧......
你读16bit和你读32bit,你用示波器看看,读32bit的时间肯定是读16bit的2倍,只是在应用层,你感觉差不多......

使用特权

评论回复
11
l0p0c| | 2015-9-15 16:52 | 只看该作者
既然clk是10MHz,那你说的2M应该是8bit的频率。这样,10MHz / 8 ≈ 2M

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

178

帖子

3

粉丝