野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17993|回复: 1

同一个时钟信号下,多通道SPI输出高频信号Under the same clock signal, multi-cha...

[复制链接]
发表于 2019-4-25 14:55:29 | 显示全部楼层 |阅读模式
本帖最后由 csodajet 于 2019-4-25 16:02 编辑

同一个时钟信号下,多通道SPI输出高频信号Under the same clock signal, multi-channel SPI outputs high frequency signals.
背景
单工模式的SPI接口有2根传输线:MOSI–主器件数据输出,从器件数据输入;SCLK –时钟信号,由主器件产生;由此可以看出在单工SPI接口中,主器件只有一个数据输出通道。
那么,当我们需要在同一时钟下,同时输出多个数据,该怎么办呢?在此,我提供一些思路,将SPI改造成双输出的SPI,并在STM32单片机上验证。
原理
单片机无法实现真正的并行处理,也就无法实现数据同时输出。但是,对于从器件来说,只要接收的数据和时钟对齐,就是符合要求的。举个例子,一次发送16bit数据0xFF00,第1个时钟上升沿对应数据1,第二个时钟上升沿对应数据0,...,第16个时钟上升沿对应数据0,只有这样才算成功。所以,即便做不到数据同时输出,只要在同一时钟下,数据是对齐的就OK了。
STM32上有多个SPI接口,利用其中两个来验证以上思路:开启SPI2,SPI,保证时钟频率相同,选择其中一个SCLK作为时钟CLK,通过优化程序,使两个SPI先后发送数据的时间差小于半个时钟周期,这样可以确保数据是对齐的。
实验
软件:STM32CubeMX,MDK_v5
硬件:STM32F429IGT6最小系统单片机,Kingst逻辑分析仪
代码:该项目下的程序包可由MDK_v5直接编译仿真
1.CubeMX生成基本程序,设置HCLK=160HZ,设置SPI2,SPI3数据大小为16bit,波特率5MBits/s 2.MDK_v5修改程序,优化SPI2,SPI3,设置发送数据长度,数据内容等 3.MDK_v5编译仿真,Kingst逻辑分析仪捕获CLK,DATA1,DATA2三个端口数据
Src/main.c主程序引脚//PC10——————CLK  //PC3——————DATA1  //PC12——————DATA2  设置发送数据长度/* SET DATA LENGTH*/        #define LEN 10        /*SET END*/设置发送数据内容/* SET DATA CONTENT */                 uint16_t DATA1[LEN] =         {0x0001,0x0005,0x0008,0x000C,0x0010,0x0014,0x0018,0x001C,0x0020,0x0024};         uint16_t DATA2[LEN] =         {0x0001,0x0005,0x0030,0x0034,0x0038,0x004C,0x0050,0x0054,0x0058,0x005C};        /* SET END */
两个通道输出数据内容:
DATA1==>0x0001,0x0005,0x0008,0x000C,0x0010,0x0014,0x0018,0x001C,0x0020,0x0024
DATA2==>0x0001,0x0005,0x0030,0x0034,0x0038,0x004C,0x0050,0x0054,0x0058,0x005C
仿真结果 ##:
两个输出通道信号时间差为50ns,小于时钟周期的一半100ns,可以确保输出数据对齐
从逻辑分析仪的结果可以看到,输出数据和程序设定一致
SPI时钟频率为5Mhz,如图所示

回复

使用道具 举报

发表于 2019-4-28 08:48:29 | 显示全部楼层
:)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-5 19:49 , Processed in 0.061502 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表