• 6线SPI传输模式探索


    硬件环境

            4G模块:FIBOCOM_AL940,基于MDM9628 CordX-A7 1.3 GHz单核,RAM 70M ROM 150M,包含两组spi接口,只能做主设备,最大支持50M时钟速率;

            MCU单片机:RH850/F1K,包含两组spi接口,支持主从模式;从模式最大支持5M时钟速率;

            4G模块做主模式,单片机做从设备,4线spi加2根同步线,master_ready输出,slave_ready输入;

    主机时序

            从机通过s_r从低到高电平变化通知主机发送时钟信号,时钟个数双方协商4K数据,主机通过改变m_r状态通知从机时钟信号开始:

     调试过程

            红色线s_r管脚,上升沿触发中断后,时钟信号没有出来,但当下降沿后时钟信号出来了,这时候单片机发送了一个字节的数据:

             发送了一个字节数据后就没有继续发送数据,这里就很异常了。

            查看单片机的6线spi模式说明手册如下,CSIHTRYO管脚作为输出,低电平忙状态,高电平收发数据状态,所以是上升沿触发4G模块发送时钟信号:

             但从波形图看4G模块没有按照上升沿发送时钟,而是下降沿发送时钟,所以需要修改spi驱动来适配单片机的时序要求。

            看4G模块的spi驱动是上升沿触发中断进行数据收发,怎么修改过来的驱动就是下降沿触发了呢,这里当时没有怀疑也没有进行确认导致了问题。

    1. gpio_direction_input(fibo_spidev->gpio_slave_ready); //SPI_SRDY has external pull-up
    2. status = request_irq(gpio_to_irq(fibo_spidev->gpio_slave_ready), spidev_slave_ready_irq_handler,
    3. IRQF_TRIGGER_RISING | IRQF_DISABLED, "ql-spi", fibo_spidev);
    4. if (status) {
    5. printk("Fail to request gpio_slave_ready IRQ\n");
    6. } else {
    7. fibo_spidev->irq_slave_ready = gpio_to_irq(fibo_spidev->gpio_slave_ready);
    8. disable_irq(fibo_spidev->irq_slave_ready);
    9. }
    10. }

    问题解决

            4G模块spi驱动修改为上升沿触发发送时钟信号开始数据收发,6线功能就正常了,但m_r管脚没有使用到,单片机没有管理这个状态也能正常收发,目前测试一个晚上没有丢包的概率发生。

  • 相关阅读:
    商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c
    FPGA 20个例程篇:11.USB2.0接收并回复CRC16位校验
    【Java面试】什么是IO的多路复用机制?
    YModem协议总结
    计算机网络-网络互连与互联网(三)
    c# 任务(Task)介绍
    Go Web——Beego之controller其他相关知识
    Windows 10任务栏点不动了,右下角wifi、音量也都消失了,只剩下个时间
    猿创征文|【设备云】FlexManager和阿里云MQTT通讯实例详解
    elasticsearch 聚合DSL语法
  • 原文地址:https://blog.csdn.net/TSZ0000/article/details/125907781