MT7688 SPI问题1

接下来估计要记录一些了,主要是记录自己的一些调试过程,内容不一定就是对的,只是自己的一些实际操作情况。

主要就是解决MT7688 和stm32f103通过SPI的通信问题

想实现的效果为:MT7688和STM32之间可以相互传输数据

问题是STM32接收到的数据不对,有错位。MT7688完全就接收不到数据。

用逻辑分析仪看了波形,贴一张图

发现如果从箭头位置开始数数据,后面在MOSI上的脉冲的位置就是对的,我测试的就是最简单的用MT7688发01 02 03---16数据,STM32收到的数据和逻辑分析仪显示的数据是一样的。

下面的MISO本来用STM32发送的也是01 02 02---16的,但是看脉冲就不知道是什么数据了,不知道为什么会是这个样子。

搜索前人是否遇到这个问题,有如下两个帖子:

https://blog.csdn.net/liuchen_csdn/article/details/51247642

https://blog.csdn.net/wind0419/article/details/82995483

第一个感觉和我这个情况比较像,然后就先按第一个操作一下。

第二个是关于全双工问题的,估计现在数据出错应该就是这个核心问题所致,但是硬件制约了,就要想办法了。

按第一个文章尝试了一下,我使用的是openwrt官方的源码,版本为OpenWrt 18.06.1,然后在/openwrt/build_dir/target-mipsel_24kc_musl/linux-ramips_mt76x8/linux-4.14.63/drivers

找到了spi-mt7621.c的文件,修改了这里

static int mt7621_spi_transfer_one_message(struct spi_master *master,
                       struct spi_message *m)
{
    struct spi_device *spi = m->spi;
#ifdef CONFIG_SOC_MT7620
    int cs = spi->chip_select;

    //if (cs)
        //return mt7621_spi_transfer_full_duplex(master, m);

#endif
    return mt7621_spi_transfer_half_duplex(master, m);
}

把这个红色部分给主机掉了,由于原始硬件不支持全双工,但是这里CS1确实全双工可能会产生问,保存后重新编译,下到板子里面测试,MOSI数据正常了,STM32也能正常接收到数据了,逻辑分析仪截图

说明确实这个问题,但是MISO还是不对,就是STM32发的数据还是不对,这个估计还要找下问题了,明天再弄了。

发布了47 篇原创文章 · 获赞 28 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/x13163303344/article/details/86670761