STM32软件模拟SPI协议控制KS1092EEG芯片

原创 云深之无迹 2024-08-05 21:54

实不相瞒,我觉得这个芯片就有毛病设计的,寄存器也不多,数据输出也不是走数字接口,但是就要用SPI接口。尤其脑电这种东西两个芯片能够?真的裂开了。。。

2个KS1092挂在同一个SPI上面,然后使用不同的CS控制

KS1092 采用带通放大器。由于高通滤波特性的超低截止频率,信号可能需要几秒钟才能稳定下来。当电极首次连接时,此稳定时间可能会给用户带来不受欢迎的延迟。

为了解决这个问题,KS1092 的快速恢复引脚 (PIN8: FR) 可以由外部信号控制。通过将 PIN8: FR 设置为高状态,将激活快速恢复模式。

这个是STM32 上面的两个SPI接口

然后围绕下面的空余IO设置一下,完全使用IO模拟,不用硬件。

设置情况

大概就是这样

寄存器也就这样的

设计这样的函数,SPI单独的和封装的传感器读取写入,以及快速稳定

首先是初始化函数,按照数据手册的顺序开关对应的引脚,最后控制SPI

这个功能也简单,就是IO控制就行

还有关

因为是多个器件,所以写了这样的函数,来手动控制对应的器件

SPI(Serial Peripheral Interface,串行外围设备接口)是一种同步串行通信协议,广泛应用于微控制器与各种外围设备之间的数据传输。SPI协议包括四个主要信号:MOSI(主输出从输入),MISO(主输入从输出),SCLK(时钟),以及CS(片选)。
以下是SPI协议读写数据的基本步骤:
  1. 片选信号(CS):主设备将CS信号拉低,选择目标从设备进行通信。
  2. 数据传输:
  • 写数据:主设备将数据写入MOSI引脚,从设备在时钟信号(SCLK)的上升或下降沿读取数据。
  • 读数据:从设备将数据写入MISO引脚,主设备在时钟信号的上升或下降沿读取数据。
  • 时钟信号(SCLK):时钟信号由主设备生成,用于同步数据传输。每个时钟周期对应传输一位数据。
  • 数据有效性:SPI可以配置为在时钟上升沿或下降沿采样数据,根据不同的设备配置选择不同的模式。
    void KS1029_Write_One_Byte(uint8_t Bytein){    uint8_t Byte = Bytein;    uint8_t len = 0;    HAL_GPIO_WritePin(KS1092_1_SCLK_GPIO_Port, KS1092_1_SCLK_Pin, GPIO_PIN_SET); // SCLK High    for (len = 0; len < 8; len++)    {        if ((Byte & 0x80))        {            HAL_GPIO_WritePin(KS1092_1_SDI_GPIO_Port, KS1092_1_SDI_Pin, GPIO_PIN_SET); // SDI High        }        else        {            HAL_GPIO_WritePin(KS1092_1_SDI_GPIO_Port, KS1092_1_SDI_Pin, GPIO_PIN_RESET); // SDI Low        }        Byte = Byte << 1;        Delay_us(5);        HAL_GPIO_WritePin(KS1092_1_SCLK_GPIO_Port, KS1092_1_SCLK_Pin, GPIO_PIN_RESET); // SCLK Low        Delay_us(5);        HAL_GPIO_WritePin(KS1092_1_SCLK_GPIO_Port, KS1092_1_SCLK_Pin, GPIO_PIN_SET); // SCLK High        Delay_us(5);    }}
    函数控制时钟信号(SCLK)和数据输入引脚(SDI)来向KS1092写入一个字节的数据。每次循环发送一位数据,总共8次循环完成一个字节的发送。
    1. 设置SCLK高电平:表示准备开始传输数据。
    2. 检查当前字节的最高位:如果为1,则将SDI设置为高电平;否则,设置为低电平。
    3. 左移字节:将字节左移一位,为发送下一个数据位做准备。
    4. 延时:确保信号稳定。
    5. 设置SCLK低电平:表示数据位已被发送。
    6. 重复上述步骤:直至发送完一个字节的所有位。
    uint8_t SPI_ReadWriteByte(uint8_t byte){    uint8_t receivedByte = 0;
    for (int i = 0; i < 8; i++) { // Generate clock rising edge for reading HAL_GPIO_WritePin(KS1092_1_SCLK_GPIO_Port, KS1092_1_SCLK_Pin, GPIO_PIN_SET);
    Delay_us(1);
    // Read MISO and store it in the lowest bit of the received byte receivedByte <<= 1; if (HAL_GPIO_ReadPin(KS1092_1_SDO_GPIO_Port, KS1092_1_SDO_Pin) == GPIO_PIN_SET) { receivedByte |= 0x01; }
    // Write data bit to MOSI if (byte & 0x80) { HAL_GPIO_WritePin(KS1092_1_SDI_GPIO_Port, KS1092_1_SDI_Pin, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(KS1092_1_SDI_GPIO_Port, KS1092_1_SDI_Pin, GPIO_PIN_RESET); }
    byte <<= 1; // Prepare the next bit to send
    Delay_us(1);
    // Generate clock falling edge for writing HAL_GPIO_WritePin(KS1092_1_SCLK_GPIO_Port, KS1092_1_SCLK_Pin, GPIO_PIN_RESET);
    Delay_us(1); }
    return receivedByte;}
    函数实现SPI协议的读写操作。对于每一位数据:
    1. 设置SCLK高电平:准备读取数据。
    2. 读取MISO:将MISO上的数据位存储到接收字节的最低位。
    3. 写数据到MOSI:根据待发送字节的最高位,设置SDI的电平。
    4. 左移字节:将待发送字节左移一位,为发送下一个数据位做准备。
    5. 设置SCLK低电平:表示数据位已被发送和读取。
    6. 延时:确保信号稳定。
      ----------------------------------------------------------------------

    KS1029_Write_One_Byte函数实现了单字节的写操作

    SPI_ReadWriteByte函数则实现了双向数据传输,既可以发送数据,也可以接收数据

       ----------------------------------------------------------------------

    软件SPI vs. 硬件SPI

    • 软件SPI:通过软件控制GPIO引脚实现SPI通信,灵活性高,但效率较低。

    • 硬件SPI:使用微控制器内部的硬件SPI模块进行通信,效率高,速度快,但灵活性相对较低。

    • 在代码里面运行这个就行


    为了应对上面的情况,我也设计了一个MSPM0L1106+KS1092的单独方案,使用一颗MCU,将SPI转换为IIC,做到多个传感器一次挂在一个接口上面,节省IO以外还可以扩展多通道检测通道。至于什么时候写,看我时间。

    评论
    • 随着数字化的不断推进,LED显示屏行业对4K、8K等超高清画质的需求日益提升。与此同时,Mini及Micro LED技术的日益成熟,推动了间距小于1.2 Pitch的Mini、Micro LED显示屏的快速发展。这类显示屏不仅画质卓越,而且尺寸适中,通常在110至1000英寸之间,非常适合应用于电影院、监控中心、大型会议、以及电影拍摄等多种室内场景。鉴于室内LED显示屏与用户距离较近,因此对于噪音控制、体积小型化、冗余备份能力及电气安全性的要求尤为严格。为满足这一市场需求,开关电源技术推出了专为
      晶台光耦 2025-01-13 10:42 495浏览
    • PNT、GNSS、GPS均是卫星定位和导航相关领域中的常见缩写词,他们经常会被用到,且在很多情况下会被等同使用或替换使用。我们会把定位导航功能测试叫做PNT性能测试,也会叫做GNSS性能测试。我们会把定位导航终端叫做GNSS模块,也会叫做GPS模块。但是实际上他们之间是有一些重要的区别。伴随着技术发展与越发深入,我们有必要对这三个词汇做以清晰的区分。一、什么是GPS?GPS是Global Positioning System(全球定位系统)的缩写,它是美国建立的全球卫星定位导航系统,是GNSS概
      德思特测试测量 2025-01-13 15:42 487浏览
    • 新年伊始,又到了对去年做总结,对今年做展望的时刻 不知道你在2024年初立的Flag都实现了吗? 2025年对自己又有什么新的期待呢? 2024年注定是不平凡的一年, 一年里我测评了50余块开发板, 写出了很多科普文章, 从一个小小的工作室成长为科工公司。 展望2025年, 中国香河英茂科工, 会继续深耕于,具身机器人、飞行器、物联网等方面的研发, 我觉得,要向未来学习未来, 未来是什么? 是掌握在孩子们生活中的发现,和精历, 把最好的技术带给孩子,
      丙丁先生 2025-01-11 11:35 457浏览
    •   在信号处理过程中,由于信号的时域截断会导致频谱扩展泄露现象。那么导致频谱泄露发生的根本原因是什么?又该采取什么样的改善方法。本文以ADC性能指标的测试场景为例,探讨了对ADC的输出结果进行非周期截断所带来的影响及问题总结。 两个点   为了更好的分析或处理信号,实际应用时需要从频域而非时域的角度观察原信号。但物理意义上只能直接获取信号的时域信息,为了得到信号的频域信息需要利用傅里叶变换这个工具计算出原信号的频谱函数。但对于计算机来说实现这种计算需要面对两个问题: 1.
      TIAN301 2025-01-14 14:15 107浏览
    • 流量传感器是实现对燃气、废气、生活用水、污水、冷却液、石油等各种流体流量精准计量的关键手段。但随着工业自动化、数字化、智能化与低碳化进程的不断加速,采用传统机械式检测方式的流量传感器已不能满足当代流体计量行业对于测量精度、测量范围、使用寿命与维护成本等方面的精细需求。流量传感器的应用场景(部分)超声波流量传感器,是一种利用超声波技术测量流体流量的新型传感器,其主要通过发射超声波信号并接收反射回来的信号,根据超声波在流体中传播的时间、幅度或相位变化等参数,间接计算流体的流量,具有非侵入式测量、高精
      华普微HOPERF 2025-01-13 14:18 477浏览
    • 数字隔离芯片是现代电气工程师在进行电路设计时所必须考虑的一种电子元件,主要用于保护低压控制电路中敏感电子设备的稳定运行与操作人员的人身安全。其不仅能隔离两个或多个高低压回路之间的电气联系,还能防止漏电流、共模噪声与浪涌等干扰信号的传播,有效增强电路间信号传输的抗干扰能力,同时提升电子系统的电磁兼容性与通信稳定性。容耦隔离芯片的典型应用原理图值得一提的是,在电子电路中引入隔离措施会带来传输延迟、功耗增加、成本增加与尺寸增加等问题,而数字隔离芯片的目标就是尽可能消除这些不利影响,同时满足安全法规的要
      华普微HOPERF 2025-01-15 09:48 70浏览
    • 01. 什么是过程能力分析?过程能力研究利用生产过程中初始一批产品的数据,预测制造过程是否能够稳定地生产符合规格的产品。可以把它想象成一种预测。通过历史数据的分析,推断未来是否可以依赖该工艺持续生产高质量产品。客户可能会要求将过程能力研究作为生产件批准程序 (PPAP) 的一部分。这是为了确保制造过程能够持续稳定地生产合格的产品。02. 基本概念在定义制造过程时,目标是确保生产的零件符合上下规格限 (USL 和 LSL)。过程能力衡量制造过程能多大程度上稳定地生产符合规格的产品。核心概念很简单:
      优思学院 2025-01-12 15:43 519浏览
    • ARMv8-A是ARM公司为满足新需求而重新设计的一个架构,是近20年来ARM架构变动最大的一次。以下是对ARMv8-A的详细介绍: 1. 背景介绍    ARM公司最初并未涉足PC市场,其产品主要针对功耗敏感的移动设备。     随着技术的发展和市场需求的变化,ARM开始扩展到企业设备、服务器等领域,这要求其架构能够支持更大的内存和更复杂的计算任务。 2. 架构特点    ARMv8-A引入了Execution State(执行状
      丙丁先生 2025-01-12 10:30 465浏览
    • 根据Global Info Research(环洋市场咨询)项目团队最新调研,预计2030年全球无人机电池和电源产值达到2834百万美元,2024-2030年期间年复合增长率CAGR为10.1%。 无人机电池是为无人机提供动力并使其飞行的关键。无人机使用的电池类型因无人机的大小和型号而异。一些常见的无人机电池类型包括锂聚合物(LiPo)电池、锂离子电池和镍氢(NiMH)电池。锂聚合物电池是最常用的无人机电池类型,因为其能量密度高、设计轻巧。这些电池以输出功率大、飞行时间长而著称。不过,它们需要
      GIRtina 2025-01-13 10:49 180浏览
    • 食物浪费已成为全球亟待解决的严峻挑战,并对环境和经济造成了重大影响。最新统计数据显示,全球高达三分之一的粮食在生产过程中损失或被无谓浪费,这不仅导致了资源消耗,还加剧了温室气体排放,并带来了巨大经济损失。全球领先的光学解决方案供应商艾迈斯欧司朗(SIX:AMS)近日宣布,艾迈斯欧司朗基于AS7341多光谱传感器开发的创新应用来解决食物浪费这一全球性难题。其多光谱传感解决方案为农业与食品行业带来深远变革,该技术通过精确判定最佳收获时机,提升质量控制水平,并在整个供应链中有效减少浪费。 在2024
      艾迈斯欧司朗 2025-01-14 18:45 57浏览
    我要评论
    0
    点击右上角,分享到朋友圈 我知道啦
    请使用浏览器分享功能 我知道啦