请教一下关于MT7688的SPI



  • 我有个产品,上面用了BIT3,还有一个STM32。widora要与stm32通讯,目前是用的串口,但是速度太慢,想改用SPI。(其实也考虑过用usb,但是对usb间的通讯不熟悉,如果用usb模拟串口,似乎可以使用比较高的波特率,但是openwrt这端的ST家的usb模拟串口驱动不知道怎么搞,如果SPI搞不定,再考虑使用usb的方案)。

    似乎MT7688的SPI有些问题。我了解到的情况:MT7688的SPI与Flash共用,那么只能作为master,使用CS1作为片选。MT7688的SPI是单工,以前用过stm32的spi,是双工的。不知道单工怎么搞。网上有人说单工就是miso和mosi共用,但是mt7688的mosi和miso是分开的拉,所以不太明白这个单工是表示啥意思。

    有网上搜了一下,wrtnode2R可以让 mt7688 和 stm32 通讯,他们好像重写了 mt7688 侧的 spi 驱动,似乎是闭源的。

    之前@prince有个帖子 http://sns.widora.io/topic/218/分享一个非硬件spi控制的spi屏幕应用程序 ,使用spi挂lcd,开始用的软件spi,后来在@mango的帮助下改用硬spi并且成功。那个帖子里面 mango 贴出了spi的接线图,但是关于程序的说明基本没有。

    请教一下,现在的bit3出货的时候带的固件,里面的spi能正常使用么?因为在/dev/下有/dev/spidev32766.1,似乎固件中加载了spi的驱动,但是不知道固件自己的带的 spi 驱动能不能正常使用。

    还有就是bit3这边如果要使用 spi,是以哪种方式使用?必须使用 c 写一个程序?还是可以使用 lua 之类的,打开一个“文件”,读写就可以了,就跟串口的使用一样。

    另外,使用 opkg list | grep spi 搜索了一下,发现 spi 相关的包不少。确认kmod-spi-gpio这个东东是用 gpio 来模拟spi,速度太慢,就不用考虑了。其他的一些包不知道做啥用的。

    谢谢!


  • administrators

    目前来看,使用SPI有两个注意的地方:
    1、上电、复位时刻保证外部CS1的SPI器件处于失能、高阻态状态,否则会影响启动。
    2、单次传输数据最大好像是2Byte,这个字节我记不清是多少了,你测试时候先以单次1Byte试试。
    3、必须半双工模式。
    程序参考那个帖子的。



  • @mango 单次<=36byte


  • administrators

    @prince 谢谢,其实你们比我用的熟多了🐃



  • 昨天用prince的spi.cpp试了下,每次收发数据的长度在32以下,程序可以正常运行。但是收到的数据不对。
    打算在板子上飞几条线出来,用示波器看下数据



  • 今天折腾了一天,还是有问题。
    1、MT7688侧收到的数据总是FF
    2、STM32侧收到的数据错误比较多。MT7688每次发1字节,内容从0x00到0xFF,STM32收到的数据中,20%的机率变成0xFF,80%正确。
    把MT7688侧的MISO和MOSI直接连接,自己发自己收,收到的内容也总是0x00



  • @BD8NCF 你的问题解决了吗?



  • @bd8ncf 我也在测试MT7688和STM32的SPI,你的情况我好像遇到了,你注意下STM32上的CPHA和CPOL的选择,是否和MT7688上的一样,不过我现在一次不能发送不了32个字节,最多只能发送15个字节,不知道是怎么回事?



  • @ladeng 纠正一下,是接收16个字节,之前搞错了