【Androidドライバー】spi0テスト

背景:
        msm8909平台,c文件测试spi_0的一次记录
测试文件就是写个c文件,编译进内核,引用dtsi里的spi_0,主要probe里面这个函数,进行的SPI的环测试:

static int spi_test_transfer(struct spi_device* spi)
{
    spi->mode |= SPI_LOOP;

    //初始化spi_message
    spi_message_init(&spi_msg);

    //初始化spi_tansfer
    spi_xfer.tx_buf = tx_buf;
    spi_xfer.len = BUFFER_SIZE;
    spi_xfer.bits_per_word = 8;
    spi_xfer.speed_hz = spi->max_speed_hz;

    //将新的spi_transfer添加到spi_msg队列尾部
    spi_message_add_tail(&spi_xfer, &spi_msg);

    //调用spi_master发送spi_message
    return spi_sync(spi, &spi_msg);
}
没用串口线,开机查看的dmesg, 中间遇到过几个问题。虽然是简单的问题,但是实际中还是会遇到。

1.没看到log,module_init好像没进

    a.检查compatible, 发现没问题,driver和dtsi(device)是一样的
    b.惯性思维,去设置CONFIG_LOG_BUF_SHIFT为16,我以为够了,以前都是够的,好久才想过来。为什么不设置成18呢,然后看了下log时间,保险的肯定要从0开始看的,因为kernel起来后,我们也不知道这个module_init到底什么时候进。之前都是3秒左右开始的(前面几秒的环形区刷了)

2.probe跑了后遇到后面截图的问题

错误时SPI transation timeout, 然后 SPI sync return -5。 正常时是返回0 .

 

然后也想了好一会儿,一开始我以为是irq gpio有问题, 因为这个数字太大了。

但是我在dtsi里面换了个gpio,实际中这个数字还是会变化,所以这个没问题。这个跟实际的硬件gpio的num应该不是一样的。(为毛我看别的文档是一样的,还有是tp的irq在log和dtsi里面怎么是一样的,暂时没想明白)

然后我实在没办法了,这里也是一个惯性思维的错。

spi的几个脚是sdk默认默认配置的。后面去检查了,发现CLK错了。。。。这。。。。

查看msm8909 BLSP配置:

 

所以,当实在没办法是,还是从可以信赖的基础开始排查吧。

不迷信以前别人改的,不迷信之前的代码,不要惯性思维。

 

おすすめ

転載: blog.csdn.net/John_chaos/article/details/109653404