CN113934657A - 一种基于gpio接口模拟spi接口的方法 - Google Patents
一种基于gpio接口模拟spi接口的方法 Download PDFInfo
- Publication number
- CN113934657A CN113934657A CN202110987547.5A CN202110987547A CN113934657A CN 113934657 A CN113934657 A CN 113934657A CN 202110987547 A CN202110987547 A CN 202110987547A CN 113934657 A CN113934657 A CN 113934657A
- Authority
- CN
- China
- Prior art keywords
- interface
- spi
- analog
- cpf11
- time interval
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 23
- 230000002093 peripheral effect Effects 0.000 title claims abstract description 18
- 238000004891 communication Methods 0.000 abstract description 14
- 230000005540 biological transmission Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 15
- 230000000630 rising effect Effects 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 102100031476 Cytochrome P450 1A1 Human genes 0.000 description 2
- 102100026533 Cytochrome P450 1A2 Human genes 0.000 description 2
- 101000941690 Homo sapiens Cytochrome P450 1A1 Proteins 0.000 description 2
- 101000855342 Homo sapiens Cytochrome P450 1A2 Proteins 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/105—Program control for peripheral devices where the programme performs an input/output emulation function
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Synchronisation In Digital Transmission Systems (AREA)
Abstract
本发明公开了一种基于GPIO接口模拟SPI接口的方法,所述方法包括如下步骤:步骤一:在微处理器芯片中选择4个GPIO接口模拟SPI接口;步骤二:通过延时单元模拟SPI接口发送数据;步骤三:通过延时单元模拟SPI接口接收数据。本发明实现对模拟SPI通信的四个接口进行配置,减少了配置的复杂度。
Description
技术领域
本发明属于嵌入式***的接口的技术领域,尤其涉及一种基于GPIO接口模拟SPI接口的方法。
背景技术
GPIO(General purpose Input Output,通用输入/输出)口在嵌入式***中应用比较多,用户可以通过编程控制GPIO口输出高低电平来传输一些信号,例如时钟信号,片选信号等。
SPI是串行外设接口(Seria I Peripheral Interface)的缩写,是一种同步串行接口技术,在芯片的管脚上最多占用四根线,可以与工业标准编码器、解码器、模拟接口芯片等实现全双工串行通信。
常见微处理器芯片通常只有一两个SPI接口,例如常用芯片tms320F28335只有一个SPI接口,对于复杂***,一两个SPI接口不够用,例如机器手关节控制,为了达到精确控制需要给机器手配上二三十个传感器,即使对传感器数据采集优化设计微处理器芯片自带的SPI接口也无法满足***需求,如果简单的扩充微处理器芯片个数又会带来空间布局的困难。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提供了一种基于GPIO接口模拟SPI接口的方法,实现对模拟SPI通信的四个接口进行配置,减少了配置的复杂度。
本发明目的通过以下技术方案予以实现:一种基于GPIO接口模拟SPI接口的方法,所述方法包括如下步骤:步骤一:在微处理器芯片中选择4个GPIO接口模拟SPI接口;步骤二:通过延时单元模拟SPI接口发送数据;步骤三:通过延时单元模拟SPI接口接收数据。
上述基于GPIO接口模拟SPI接口的方法中,在步骤一中,一个GPIO接口模拟片选信号CS的SPI接口;一个GPIO接口模拟时钟信号SCLK的SPI接口;一个GPIO接口模拟输出信号Dout的SPI接口;一个GPIO接口模拟输入信号Din的SPI接口。
上述基于GPIO接口模拟SPI接口的方法中,在步骤一中,模拟片选信号CS的SPI接口的GPIO接口设置为数据输出模式;模拟时钟信号SCLK的SPI接口的GPIO接口设置为数据输出模式;模拟输出信号Dout的SPI接口的GPIO接口设置为数据输出模式;模拟输入信号Din的SPI接口的GPIO接口设置为数据输入模式。
上述基于GPIO接口模拟SPI接口的方法中,延时单元用来调节模拟时钟频率高低的功能单元。
上述基于GPIO接口模拟SPI接口的方法中,在步骤二中,通过延时单元模拟SPI接口发送数据包括如下步骤:步骤P21:将模拟片选信号CS的SPI接口电平下拉变为有效电平;步骤P22:当模拟片选信号CS有效后,模拟时钟信号SCLK下降沿信号之前,需要t1的时间间隔;其中,t1的时间间隔调用延时单元实现;步骤P23:将模拟时钟信号SCLK的SPI接口设为低电平,表示可以启动一位数据的发送;步骤P24:在时钟下降沿后需要满足大于t5时间间隔才能传送输出信号,其中,t5的时间间隔调用延时单元实现;步骤P25:根据待发送位数据设置模拟输出信号Dout的SPI接口电平高低;步骤P26:在模拟输出信号Dout的SPI接口发送出一位数据后,需要满足大于(t3-t5)时间间隔才能将模拟时钟信号SCLK接口设置为高电平;其中,(t3-t5)时间间隔调用延时单元实现;步骤P27:将模拟时钟信号SCLK的SPI接口设置为高电平,为传输下位数据做准备;步骤P28:在模拟时钟信号SCLK的SPI接口由高电平变为低电平,需要满足大于t2时间间隔才能将模拟时钟信号SCLK的SPI接口的高电平设置为低电平,其中,t2时间间隔调用延时单元实现。
上述基于GPIO接口模拟SPI接口的方法中,在步骤三中,通过延时单元模拟SPI接口接收数据包括如下步骤:步骤P31:在数据接收之前需将模拟片选信号CS接口电平下拉变为有效电平;步骤P32:当模拟片选信号CS有效后,模拟时钟信号SCLK下降沿信号之前,需要t6的时间间隔;其中,t6的时间间隔调用延时单元实现;步骤P33:将模拟时钟信号SCLK的SPI接口设为低电平,表示可以启动一位数据的接收;步骤P34:在时钟下降沿后需要满足大于t10时间间隔才能传送输入信号,其中,t10的时间间隔调用延时单元实现;步骤P35:根据模拟输入信号Din的SPI接口检测到电平高低,记录输入数据;步骤P36:在模拟输入信号Din的SPI接口接收一位数据后,需要满足大于(t8-t10)时间间隔才能将模拟时钟信号SCLK接口设置为高电平,其中,(t8-t10)时间间隔调用延时单元实现;步骤P37:将模拟时钟信号SCLK的SPI接口设置为高电平,为传输下位数据做准备;步骤P38:在模拟时钟信号SCLK的SPI接口由高电平变为低电平,需要满足大于t7时间间隔才能将模拟时钟信号SCLK的SPI接口的高电平设置为低电平,其中,t7时间间隔调用延时单元实现。
本发明与现有技术相比具有如下有益效果:
(1)本发明实现对模拟SPI通信的四个接口进行配置,达到效果是免去了对SPI多个寄存器的配置,减少了配置的复杂度;
(2)本发明不用受主控芯片SPI接收、发送数据只能是1各字节的倍数,可以根据通信实际需求设置收发数据的长度,提高了使用的灵活性;
(3)本发明可以根据SPI通信协议时序要求灵活配置延时单元,达到适合的时钟频率;
(4)本发明可以突破嵌入式微处理器芯片自带SPI接口数量的限制,可以根据应用需要和微处理芯片通用引脚个数来配置模拟SPI接口。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本发明实施例提供的延时单元流程图;
图2是本发明实施例提供的模拟SPI接口发送数据流程图;
图3是本发明实施例提供的数据发送时序图;
图4是本发明实施例提供的模拟SPI接口接收数据流程图;
图5是本发明实施例提供的数据接收时序图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
本实施例提供了一种基于GPIO接口模拟SPI接口的方法,该方法包括如下步骤:步骤一:在微处理器芯片中选择4个GPIO接口模拟SPI接口;步骤二:通过延时单元模拟SPI接口发送数据;步骤三:通过延时单元模拟SPI接口接收数据。
在微处理器芯片中选择4个GPIO接口模拟SPI接口:(1)一个GPIO接口模拟片选信号CS;(2)一个GPIO接口模拟时钟信号SCLK;(3)一个GPIO接口模拟输出信号Dout;(4)一个GPIO接口模拟输入信号Din。
微处理器芯片作为主站的通信模式,空闲时SCLK时钟为高电平,采样时刻为偶数边沿,所以在程序中对四个选中的模拟GPIO接口配置如下:(1)模拟片选信号CS接口配置为普通GPIO接口,设置为数据输出模式;(2)模拟时钟信号SCLK接口配置为普通GPIO接口,设置为数据输出模式;(3)模拟输出信号Dout接口配置为普通GPIO接口,设置为数据输出模式;(4)模拟输入信号Din接口配置为普通GPIO接口,设置为数据输入模式。
模拟SPI接口需要配置的要素:(1)设置每次收发数据的长度。如果使用DSP的SPI接口,发送接收数据长度,由于受寄存器限制,只能是字节或字节的倍数,如果使用模拟SPI接口,收发数据的长度可以根据需求灵活设置;(2)初始化模拟片选信号CS为高电平;(3)初始化模拟时钟信号SCLK为高电平,即时钟空闲状态为高电平。
由于使用SPI通信对时序要求比较高,所以需要根据待使用的SPI协议配置通信用模拟时钟频率,延时单元的作用就是用来调节模拟时钟频率高低的功能单元。通过程序算法实现延时单元的功能,通过改变程序中循环次数,调整延时单元用时长短,延时单元算法流程如图1。
1)实现P11功能所用汇编指令集合CP11={cp11_1,cp11_2……cp11_n},与集合CP11中元素一一对应的每条指令需要执行的指令周期次数集合CPF11={cpf11_1,cpf11_2……cpf11_n1};
实现P12功能所用汇编指令集合CP12={cp12_1,cp12_2……cp12_n},与集合CP12中元素一一对应的每条指令需要执行的指令周期次数集合CPF12={cpf12_1,cpf12_2……cpf12_n2};
实现P13功能所用汇编指令集合CP13={cp13_1,cp13_2……cp13_n},与集合CP13中元素一一对应的每条指令需要执行的指令周期次数集合CPF13={cpf13_1,cpf13_2……cpf13_n3};
实现P14功能所用汇编指令集合CP14={cp14_1,cp14_2……cp14_n},与集合CP14中元素一一对应的每条指令需要执行的指令周期次数集合CPF14={cpf14_1,cpf14_2……cpf14_n4};
2)每条汇编语言指令周期所需时间ct(注:不同芯片其对应的指令周期所用时间不同);延时单元中实现P13功能需要循环的次数cyc_length,通过调整cyc_length次数控制执行延时单元获得时长;
3)执行延时单元可以获得延时:
t_delay=((cpf11_1+cpf11_2+……cpf11_n1)+((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))*cyc_length+(cpf11_1+cpf11_2+……cpf11_n4))*ct;……公式1
模拟SPI接口发送数据:
依据SPI数据发送时序图(图3)和模拟SPI接口数据发送流程(图2),具体流程说明如下:
步骤P21:依据图3,SPI数据发送时序图,在数据发送之前需将模拟片选信号CS接口电平下拉变为有效电平;
步骤P22:当模拟片选信号CS有效后,模拟时钟SCLK下降沿信号之前,依据SPI数据发送时序图3,需要t1的时间间隔,该时间间隔可以调用延时单元22实现,参照公式1,延时单元22所用时长:
t_delay_t22=((cpf11_1+cpf11_2+……cpf11_n1)+((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))*cyc_length22+(cpf11_1+cpf11_2+……cpf11_n4))*ct;……公式2
公式2中参数:cpf11_1,cpf11_2……cpf11_n1;cpf12_1,cpf12_2……cpf12_n2;cp13_1,cp13_2……cp13_n3;cpf14_1,cpf14_2……cpf14_n4;ct;与公式1所指代含义相同。
cyc_length22为满足t1时间间隔所需的循环的次数,可由t_delay_t22>t1(公式3)计算求得。由公式2和公式3可求得cyc_length22,
cyc_length22>((t1/ct)-(cpf11_1+cpf11_2+……cpf11_n1)-(cpf11_1+cpf11_2+……cpf11_n4))/((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))
步骤P23:将模拟时钟信号SCLK接口设为低电平,表示可以启动一位数据的发送;
步骤P24:依据SPI数据发送时序图3,在时钟下降沿后需要满足大于t5时间间隔才能传送输出信号,该时间间隔可以调用延时单元24实现,参照公式1,延时单元24所用时长:
t_delay_t24=((cpf11_1+cpf11_2+……cpf11_n1)+((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))*cyc_length24+(cpf11_1+cpf11_2+……cpf11_n4))*ct;……公式4
公式4中参数:cpf11_1,cpf11_2……cpf11_n1;cpf12_1,cpf12_2……cpf12_n2;cp13_1,cp13_2……cp13_n3;cpf14_1,cpf14_2……cpf14_n4;ct;与公式1所指代含义相同。
cyc_length24为满足t5时间间隔所需的循环的次数,可由t_delay_t24>t5(公式5)计算求得。由公式4和公式5可求得cyc_length24,
cyc_length24>((t5/ct)-(cpf11_1+cpf11_2+……cpf11_n1)-(cpf11_1+cpf11_2+……cpf11_n4))/((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))。
步骤P25:根据待发送位数据设置模拟输出信号Dout接口电平高低;
步骤P26:依据SPI数据发送时序图3,在模拟输出信号Dout接口发送出一位数据后,需要满足大于(t3-t5)时间间隔才能将模拟时钟信号SCLK接口设置为高电平,该时间间隔可以调用延时单元26实现,参照公式1,延时单元26所用时长:
t_delay_t26=((cpf11_1+cpf11_2+……cpf11_n1)+((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))*cyc_length26+(cpf11_1+cpf11_2+……cpf11_n4))*ct;……公式6
公式6中参数:cpf11_1,cpf11_2……cpf11_n1;cpf12_1,cpf12_2……cpf12_n2;cp13_1,cp13_2……cp13_n3;cpf14_1,cpf14_2……cpf14_n4;ct;与公式1所指代含义相同。
cyc_length26为满足(t3-t5)时间间隔所需的循环的次数,可由t_delay_t26>(t3-t5)(公式7)计算求得。由公式6和公式7可求得cyc_length26:
cyc_length26>(((t3-t5)/ct)-(cpf11_1+cpf11_2+……cpf11_n1)-(cpf11_1+cpf11_2+……cpf11_n4))/((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))。
步骤P27:将模拟时钟信号SCLK接口设置为高电平,为传输下位数据做准备;
步骤P28:依据SPI数据发送时序图3,在模拟时钟信号SCLK接口由高电平变为低电平,需要满足大于t2时间间隔才能将模拟时钟信号SCLK接口的高电平设置为低电平,该时间间隔可以调用延时单元28实现,参照公式1,延时单元28所用时长:
t_delay_t28=((cpf11_1+cpf11_2+……cpf11_n1)+((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))*cyc_length28+(cpf11_1+cpf11_2+……cpf11_n4))*ct;……公式8
公式8中参数:cpf11_1,cpf11_2……cpf11_n1;cpf12_1,cpf12_2……cpf12_n2;cp13_1,cp13_2……cp13_n3;cpf14_1,cpf14_2……cpf14_n4;ct;与公式1所指代含义相同。
cyc_length28为满足t2时间间隔所需的循环的次数,可由t_delay_t28>t2(公式9)计算求得。由公式8和公式9可求得cyc_length28:
cyc_length28>((t2/ct)-(cpf11_1+cpf11_2+……cpf11_n1)-(cpf11_1+cpf11_2+……cpf11_n4))/((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))。
步骤P29:判断数据是否发送完毕,是进入步骤P210,否则进入步骤P23;
步骤P210:依据SPI数据发送时序图3,一旦数据发送结束需要满足大于t4时间间隔才能将模拟片选信号CS接口电平上拉变为无效电平,表示此次通信结束。由于发送流程在判断数据是否发送完毕之前加入了延时单元28,在执行了延时单元28后获得了t2的时间间隔,当t2>t4时,通过执行延时单元28已经可以满足时钟上升沿和片选上升沿之间时间间隔要求,此时不需要延时单元210;当t2<t4时,通过执行延时单元28不能满足时钟上升沿和片选上升沿之间时间间隔要求,此时需要延时单元210,延时单元210所用时长:
t_delay_t210=((cpf11_1+cpf11_2+……cpf11_n1)+((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))*cyc_length210+(cpf11_1+cpf11_2+……cpf11_n4))*ct;……公式10
公式10中参数:cpf11_1,cpf11_2……cpf11_n1;cpf12_1,cpf12_2……cpf12_n2;cp13_1,cp13_2……cp13_n3;cpf14_1,cpf14_2……cpf14_n4;ct;与公式1所指代含义相同。
cyc_length210为满足(t4-t2)时间间隔所需的循环的次数,可由t_delay_t210>(t4-t2)(公式11)计算求得。由公式10和公式11可求得cyc_length210,
cyc_length210>(((t4-t2)/ct)-(cpf11_1+cpf11_2+……cpf11_n1)-(cpf11_1+cpf11_2+……cpf11_n4))/((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))。
P211:将模拟片选信号CS接口设为高电平,标志本次数据发送完成。
模拟SPI接口接收数据:
依据SPI数据接收时序图(图5)和模拟SPI接口数据接收流程(图4),具体流程说明如下:
步骤P31:依据图5,SPI数据接收时序图,在数据接收之前需将模拟片选信号CS接口电平下拉变为有效电平;
步骤P32:当模拟片选信号CS有效后,模拟时钟SCLK下降沿信号之前,依据SPI数据发送时序图5,需要t6的时间间隔,该时间间隔可以调用延时单元32实现,参照公式1,延时单元32所用时长:
t_delay_t32=((cpf11_1+cpf11_2+……cpf11_n1)+((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))*cyc_length32+(cpf11_1+cpf11_2+……cpf11_n4))*ct;……公式12
公式2中参数:cpf11_1,cpf11_2……cpf11_n1;cpf12_1,cpf12_2……cpf12_n2;cp13_1,cp13_2……cp13_n3;cpf14_1,cpf14_2……cpf14_n4;ct;与公式1所指代含义相同。
cyc_length32为满足t6时间间隔所需的循环的次数,可由t_delay_t32>t6(公式13)计算求得。由公式12和公式13可求得cyc_length32,
cyc_length32>((t6/ct)-(cpf11_1+cpf11_2+……cpf11_n1)-(cpf11_1+cpf11_2+……cpf11_n4))/((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))
步骤P33:将模拟时钟信号SCLK接口设为低电平,表示可以启动一位数据的接收;
步骤P34:依据SPI数据接收时序图5,在时钟下降沿后需要满足大于t10时间间隔才能传送输入信号,该时间间隔可以调用延时单元34实现,参照公式1,延时单元34所用时长:
t_delay_t34=((cpf11_1+cpf11_2+……cpf11_n1)+((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))*cyc_length34+(cpf11_1+cpf11_2+……cpf11_n4))*ct;……公式14
公式14中参数:cpf11_1,cpf11_2……cpf11_n1;cpf12_1,cpf12_2……cpf12_n2;cp13_1,cp13_2……cp13_n3;cpf14_1,cpf14_2……cpf14_n4;ct;与公式1所指代含义相同。
cyc_length34为满足t10时间间隔所需的循环的次数,可由t_delay_t34>t10(公式15)计算求得。由公式14和公式15可求得cyc_length34,
cyc_length34>((t10/ct)-(cpf11_1+cpf11_2+……cpf11_n1)-(cpf11_1+cpf11_2+……cpf11_n4))/((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))。
步骤P35:根据模拟输入信号Din接口检测到电平高低,记录输入数据;
步骤P36:依据SPI数据接收时序图5,在模拟输入信号Din接口接收一位数据后,需要满足大于(t8-t10)时间间隔才能将模拟时钟信号SCLK接口设置为高电平,该时间间隔可以调用延时单元36实现,参照公式1,延时单元36所用时长:
t_delay_t36=((cpf11_1+cpf11_2+……cpf11_n1)+((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))*cyc_length36+(cpf11_1+cpf11_2+……cpf11_n4))*ct;……公式16
公式16中参数:cpf11_1,cpf11_2……cpf11_n1;cpf12_1,cpf12_2……cpf12_n2;cp13_1,cp13_2……cp13_n3;cpf14_1,cpf14_2……cpf14_n4;ct;与公式1所指代含义相同。
cyc_length36为满足(t8-t10)时间间隔所需的循环的次数,可由t_delay_t36>(t8-t10)(公式17)计算求得。由公式16和公式17可求得cyc_length36,cyc_length36>(((t8-t10)/ct)-(cpf11_1+cpf11_2+……cpf11_n1)-(cpf11_1+cpf11_2+……cpf11_n4))/((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))。
步骤P37:将模拟时钟信号SCLK接口设置为高电平,为输入下位数据做准备;
步骤P38:依据SPI数据发送时序图5,在模拟时钟信号SCLK接口由高电平变为低电平,需要满足大于t7时间间隔才能将模拟时钟信号SCLK接口的高电平设置为低电平,该时间间隔可以调用延时单元38实现,参照公式1,延时单元38所用时长:
t_delay_t38=((cpf11_1+cpf11_2+……cpf11_n1)+((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))*cyc_length38+(cpf11_1+cpf11_2+……cpf11_n4))*ct;……公式18
公式18中参数:cpf11_1,cpf11_2……cpf11_n1;cpf12_1,cpf12_2……cpf12_n2;cp13_1,cp13_2……cp13_n3;cpf14_1,cpf14_2……cpf14_n4;ct;与公式1所指代含义相同。
cyc_length38为满足t7时间间隔所需的循环的次数,可由t_delay_t38>t7(公式19)计算求得。由公式18和公式19可求得cyc_length38,
cyc_length38>((t7/ct)-(cpf11_1+cpf11_2+……cpf11_n1)-(cpf11_1+cpf11_2+……cpf11_n4))/((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))。
步骤P39:判断数据是否接收完毕,是进入步骤P310,否则进入步骤P33;
步骤P310:依据SPI数据发送时序图5,一旦数据接收结束需要满足大于t9时间间隔才能将模拟片选信号CS接口电平上拉变为无效电平,表示此次通信结束。由于发送流程在判断数据是否发送完毕之前加入了延时单元38,在执行了延时单元38后获得了t7的时间间隔,当t7>t9时,通过执行延时单元38已经可以满足时钟上升沿和片选上升沿之间时间间隔要求,此时不需要延时单元310;当t7<t9时,通过执行延时单元38不能满足时钟上升沿和片选上升沿之间时间间隔要求,此时需要延时单元310,延时单元310所用时长:
t_delay_t310=((cpf11_1+cpf11_2+……cpf11_n1)+((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))*cyc_length310+(cpf11_1+cpf11_2+……cpf11_n4))*ct;……公式20
公式20中参数:cpf11_1,cpf11_2……cpf11_n1;cpf12_1,cpf12_2……cpf12_n2;cp13_1,cp13_2……cp13_n3;cpf14_1,cpf14_2……cpf14_n4;ct;与公式1所指代含义相同。
cyc_length310为满足(t9-t7)时间间隔所需的循环的次数,可由t_delay_t310>(t9-t7)(公式21)计算求得。由公式20和公式21可求得cyc_length310,cyc_length310>(((t9-t7)/ct)-(cpf11_1+cpf11_2+……cpf11_n1)-(cpf11_1+cpf11_2+……cpf11_n4))/((cpf12_1+cpf12_2+……cpf12_n2)+(cpf13_1+cpf13_2+……cpf13_n3))。
步骤P311:将模拟片选信号CS接口设为高电平,标志本次数据接收完成。
本发明实现对模拟SPI通信的四个接口进行配置,达到效果是免去了对SPI多个寄存器的配置,减少了配置的复杂度;本发明不用受主控芯片SPI接收、发送数据只能是1各字节的倍数,可以根据通信实际需求设置收发数据的长度,提高了使用的灵活性;本发明可以根据SPI通信协议时序要求灵活配置延时单元,达到适合的时钟频率;本发明可以突破嵌入式微处理器芯片自带SPI接口数量的限制,可以根据应用需要和微处理芯片通用引脚个数来配置模拟SPI接口。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
Claims (6)
1.一种基于GPIO接口模拟SPI接口的方法,其特征在于,所述方法包括如下步骤:
步骤一:在微处理器芯片中选择4个GPIO接口模拟SPI接口;
步骤二:通过延时单元模拟SPI接口发送数据;
步骤三:通过延时单元模拟SPI接口接收数据。
2.根据权利要求1所述的基于GPIO接口模拟SPI接口的方法,其特征在于:在步骤一中,一个GPIO接口模拟片选信号CS的SPI接口;一个GPIO接口模拟时钟信号SCLK的SPI接口;一个GPIO接口模拟输出信号Dout的SPI接口;一个GPIO接口模拟输入信号Din的SPI接口。
3.根据权利要求2所述的基于GPIO接口模拟SPI接口的方法,其特征在于:在步骤一中,模拟片选信号CS的SPI接口的GPIO接口设置为数据输出模式;模拟时钟信号SCLK的SPI接口的GPIO接口设置为数据输出模式;模拟输出信号Dout的SPI接口的GPIO接口设置为数据输出模式;模拟输入信号Din的SPI接口的GPIO接口设置为数据输入模式。
4.根据权利要求1所述的基于GPIO接口模拟SPI接口的方法,其特征在于:延时单元用来调节模拟时钟频率高低的功能单元。
5.根据权利要求1所述的基于GPIO接口模拟SPI接口的方法,其特征在于:在步骤二中,通过延时单元模拟SPI接口发送数据包括如下步骤:
步骤P21:将模拟片选信号CS的SPI接口电平下拉变为有效电平;
步骤P22:当模拟片选信号CS有效后,模拟时钟信号SCLK下降沿信号之前,需要t1的时间间隔;其中,t1的时间间隔调用延时单元实现;
步骤P23:将模拟时钟信号SCLK的SPI接口设为低电平,表示可以启动一位数据的发送;
步骤P24:在时钟下降沿后需要满足大于t5时间间隔才能传送输出信号,其中,t5的时间间隔调用延时单元实现;
步骤P25:根据待发送位数据设置模拟输出信号Dout的SPI接口电平高低;
步骤P26:在模拟输出信号Dout的SPI接口发送出一位数据后,需要满足大于(t3-t5)时间间隔才能将模拟时钟信号SCLK接口设置为高电平;其中,(t3-t5)时间间隔调用延时单元实现;
步骤P27:将模拟时钟信号SCLK的SPI接口设置为高电平,为传输下位数据做准备;
步骤P28:在模拟时钟信号SCLK的SPI接口由高电平变为低电平,需要满足大于t2时间间隔才能将模拟时钟信号SCLK的SPI接口的高电平设置为低电平,其中,t2时间间隔调用延时单元实现。
6.根据权利要求1所述的基于GPIO接口模拟SPI接口的方法,其特征在于:在步骤三中,通过延时单元模拟SPI接口接收数据包括如下步骤:
步骤P31:在数据接收之前需将模拟片选信号CS接口电平下拉变为有效电平;
步骤P32:当模拟片选信号CS有效后,模拟时钟信号SCLK下降沿信号之前,需要t6的时间间隔;其中,t6的时间间隔调用延时单元实现;
步骤P33:将模拟时钟信号SCLK的SPI接口设为低电平,表示可以启动一位数据的接收;
步骤P34:在时钟下降沿后需要满足大于t10时间间隔才能传送输入信号,其中,t10的时间间隔调用延时单元实现;
步骤P35:根据模拟输入信号Din的SPI接口检测到电平高低,记录输入数据;
步骤P36:在模拟输入信号Din的SPI接口接收一位数据后,需要满足大于(t8-t10)时间间隔才能将模拟时钟信号SCLK接口设置为高电平,其中,(t8-t10)时间间隔调用延时单元实现;
步骤P37:将模拟时钟信号SCLK的SPI接口设置为高电平,为传输下位数据做准备;
步骤P38:在模拟时钟信号SCLK的SPI接口由高电平变为低电平,需要满足大于t7时间间隔才能将模拟时钟信号SCLK的SPI接口的高电平设置为低电平,其中,t7时间间隔调用延时单元实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110987547.5A CN113934657A (zh) | 2021-08-26 | 2021-08-26 | 一种基于gpio接口模拟spi接口的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110987547.5A CN113934657A (zh) | 2021-08-26 | 2021-08-26 | 一种基于gpio接口模拟spi接口的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113934657A true CN113934657A (zh) | 2022-01-14 |
Family
ID=79275076
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110987547.5A Pending CN113934657A (zh) | 2021-08-26 | 2021-08-26 | 一种基于gpio接口模拟spi接口的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113934657A (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103488601A (zh) * | 2012-06-12 | 2014-01-01 | 京信通信技术(广州)有限公司 | 一种时钟延时、数据访问方法、***及设备 |
CN109976230A (zh) * | 2019-04-22 | 2019-07-05 | 东信和平科技股份有限公司 | 一种物联网智能设备 |
-
2021
- 2021-08-26 CN CN202110987547.5A patent/CN113934657A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103488601A (zh) * | 2012-06-12 | 2014-01-01 | 京信通信技术(广州)有限公司 | 一种时钟延时、数据访问方法、***及设备 |
CN109976230A (zh) * | 2019-04-22 | 2019-07-05 | 东信和平科技股份有限公司 | 一种物联网智能设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10007628B2 (en) | Dynamically adjustable multi-line bus shared by multi-protocol devices | |
JP2678283B2 (ja) | データ通信制御装置 | |
US10642778B2 (en) | Slave master-write/read datagram payload extension | |
US20150199287A1 (en) | Camera control interface extension with in-band interrupt | |
EP3387796A1 (en) | Optimal latency packetizer finite state machine for messaging and input/output transfer interfaces | |
KR20170110610A (ko) | 시리얼 버스를 위한 수신 클록 캘리브레이션 | |
WO2018231550A1 (en) | Slave-to-slave communication in i3c bus topology | |
US20180329837A1 (en) | Input/output direction decoding in mixed vgpio state exchange | |
US20180232324A1 (en) | Multi-port multi-sideband-gpio consolidation technique over a multi-drop serial bus | |
JP2018533140A (ja) | 高データレートモードを有する無線周波数フロントエンドデバイス | |
US10114789B2 (en) | System on chip for packetizing multiple bytes and data processing system including the same | |
CN110515891B (zh) | 一种fpga芯片及其配置方法 | |
CN107436851B (zh) | 串行外设接口四线隔离***及其控制方法 | |
CN111078614A (zh) | 一种基于fpga的功能模块 | |
US8527671B2 (en) | DMA engine | |
US6378011B1 (en) | Parallel to serial asynchronous hardware assisted DSP interface | |
US7418528B2 (en) | Multimode, multiline data transfer system and method of operating the same | |
US20190347225A1 (en) | Latency optimized i3c virtual gpio with configurable operating mode and device skip | |
CN113934657A (zh) | 一种基于gpio接口模拟spi接口的方法 | |
CN116954192A (zh) | 总线控制器的功能测试方法、***、装置及可读存储介质 | |
JP3289704B2 (ja) | マイクロコンピュータ | |
CN116192624A (zh) | 通信接口的配置方法和通信接口 | |
CN107391406B (zh) | 一种用于协议处理的微处理器及处理协议的方法 | |
CN111130678B (zh) | 数据传输方法、装置、设备及计算机可读存储介质 | |
CN101989194A (zh) | 无线通讯模块二次开发方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |