• 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管脚没有使用到,单片机没有管理这个状态也能正常收发,目前测试一个晚上没有丢包的概率发生。

  • 相关阅读:
    【Android笔记24】Android中图形图像处理技术的介绍及使用
    亲测flutter打包apk后大小,比较满意
    Makefile+Make基础知识
    2022年全国大学生数学建模竞赛C题思路
    Python中跨越多个文件使用全局变量
    NativeScaler()与loss_scaler【loss.backward()和 optimizer.step()】
    Spring 源码(13)Spring Bean 的创建过程(4)
    DeFi收益来源全面概述
    【RWKV】如何新增一个自定义的Tokenizer和模型到HuggingFace
    2022全国大学生数学建模竞赛获奖难么?国赛求解过程技巧及方案
  • 原文地址:https://blog.csdn.net/TSZ0000/article/details/125907781