主机与从机之间的通信系统和通信方法与流程
未命名
07-27
阅读:76
评论:0
1.本技术涉及电子技术领域或者芯片技术领域,具体涉及一种主机与从机之间的通信系统和通信方法。
背景技术:
2.现在的i2c(inter-integrated circuit)通信在消费电子产品上越来越普及,在很多电子产品上都有i2c接口。i2c通信应用场景广泛,技术成熟,现在很多芯片之间的交互,数据传输以及读取,就是通过i2c通信来实现的,但有些时候标准模式的i2c通信并不能满足所有的应用场景。
3.实际应用中,有些时候芯片为了省片内资源,降低成本,并不支持i2c master以标准模式对从机芯片内的所有寄存器读和写,但在一些应用场景下,外界的i2c master又需要与从机进行通信,进而知道从机的寄存器各种数据,因此,如何在芯片不支持i2c master以标准模式对从机芯片内的所有寄存器读和写的情况下,实现主机与从机之间通信的问题亟待解决。
技术实现要素:
4.本技术实施例提供了一种主机与从机之间的通信系统和通信方法,能够实现在芯片不支持i2c master以标准模式对从机芯片内的所有寄存器读和写的情况下,实现主机与从机之间通信。
5.第一方面,本技术实施例提供一种主机与从机之间的通信系统,所述通信系统包括主机和从机,所述主机与从机之间通过三根线进行通信,具体为:所述三根线包括:sck线、sda线和int线;
6.所述主机的sck_m引脚通过所述sck线直连所述从机的sck_s引脚;所述主机的sda_m引脚通过所述sda线直连所述从机的sda_s引脚;所述主机的int_m引脚通过所述int线直连所述从机的int_s引脚;所述sck_m引脚、所述sck_s引脚均通过第一电阻r1连接电源vcc;所述sda_m引脚、所述sda_s引脚通过第二电阻r2连接所述电源vcc;
7.在所述主机与所述从机之间的逻辑电平误差的绝对值小于预设阈值时,所述主机通过读取所述int_m引脚的逻辑电平状态判断所述从机的工作状态,在确定所述从机接收所述主机的一整个通信过程完成后,提醒所述主机以i2c标准模式去可读或写所述从机中的中间寄存器的数据,以通过该数据识别通信结果。
8.第二方面,本技术实施例提供一种应用于如第一方面所述的通信系统,所述方法包括:
9.当所述主机进行写操作a,完成一整个通信过程后的i2c_irq_count为6,确定所述从机已经接收到了所述主机写入的6个8bit数据,其中,该6个8bit数据包括:一个8bit数据为write_mode、一个8bit的addr和一个32bit的data;所述i2c_irq_count表示所述主机向所述从机每次写周期进入i2c中断服务函数的次数;所述写操作a包括6个i2c标准写周期和
1个i2c标准读周期;
10.当完整一个写操作a完成后,如果所述主机读取到的read_reg[0]中间寄存器值不是6,则说明通信异常;
[0011]
当所述主机进行读操作b,完成一整个通信过程后的i2c_irq_count为2,确定所述从机接收到所述主机写入的2个8bit数据,所述2个8bit数据包括一个8bit的read_mode和一个8bit的addr;所述读操作b包括2个i2c标准写周期和5个i2c标准读周期;
[0012]
当完整一个读操作b完成后,如果所述主机读取到的read_reg[0]中间寄存器值不是2,则说明通信异常。
[0013]
第三方面,本技术实施例提供一种芯片,该芯片包括如第一方面所述的通信系统。
[0014]
第四方面,本技术实施例提供一种电子设备,所述电子设备包括第一方面所述的通信系统,或者,所述电子设备包括如第三方面所述的芯片。
[0015]
实施本技术实施例,具有如下有益效果:
[0016]
基于本技术实施例所提供的主机与从机之间的通信系统和通信方法,该通信系统包括主机和从机,主机与从机之间通过三根线进行通信,具体为:三根线包括:sck线、sda线和int线,主机的sck_m引脚通过sck线直连从机的sck_s引脚;主机的sda_m引脚通过sda线直连从机的sda_s引脚;主机的int_m引脚通过int线直连从机的int_s引脚;sck_m引脚、sck_s引脚均通过第一电阻r1连接电源vcc;sda_m引脚、sda_s引脚通过第二电阻r2连接电源vcc,在主机与从机之间的逻辑电平误差的绝对值小于预设阈值时,主机通过读取int_m引脚的逻辑电平状态判断从机的工作状态,在确定从机接收主机的一整个通信过程完成后,提醒主机以i2c标准模式去可读或写从机中的中间寄存器的数据,以通过该数据识别通信结果,能够实现在芯片不支持i2c master以标准模式对从机芯片内的所有寄存器读和写的情况下,实现主机与从机之间通信,并且具有通信自校验、加密防破解功能、通信超时功能和从机唤醒功能。
附图说明
[0017]
为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0018]
图1是本技术实施例提供的一种i2c master向0x05地址写0x5a数据时序的演示示意图;
[0019]
图2是本技术实施例提供的一种i2c master向0x05地址读0x5a数据时序的演示示意图;
[0020]
图3是本技术实施例提供的一种主机与从机之间的通信系统的结构示意图;
[0021]
图4是本技术实施例提供的另一种主机与从机之间的通信系统的结构示意图;
[0022]
图5是本技术实施例提供的又一种主机与从机之间的通信系统的结构示意图;
[0023]
图6是本技术实施例提供的一种从机通信协议的数据流程示意图;
[0024]
图7是本技术实施例提供的一种i2c master向从机寄存器读数据流程示意图;
[0025]
图8是本技术实施例提供的一种i2c master向从机寄存器写数据流程示意图;
[0026]
图9是本技术实施例提供的一种主程序通信流程示意图。
具体实施方式
[0027]
为了本技术领域人员更好理解本技术的技术方案,下面结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本技术的部分实施例,而并非全部的实施例。基于本技术实施例的描述,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术所保护的范围。
[0028]
本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如,包含了一系列步骤或单元的过程、方法、软件、产品或设备没有限定于已列出的步骤或单元,而是还包括没有列出的步骤或单元,或还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
[0029]
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
[0030]
下面结合附图对本技术实施例进行介绍,附图中相交导线的交叉处有圆点表示导线相接,交叉处无圆点表示导线不相接。
[0031]
本技术实施例中,为了能实现i2c master以标准模式对从机芯片里面所有寄存器进行读写,就需要在i2c master和从机中间设计一套通信协议方法和系统,以实现i2c master对从机芯片的所有寄存器进行读写访问,并且这种从机通信协议还需要有稳定性以及安全性,可以有校验和加密作用。本技术实现了从机这种通信协议方法和系统。
[0032]
本技术实施例中,i2c master即为主机。
[0033]
本技术实施例中,图1、图2是i2c master向从机以标准模式读和写的逻辑流程以及时序流程。
[0034]
具体实现中,如图1所示,为i2c master向从机的0x05地址写0x5a数据的时序。首先i2c master产生起始信号,接着发送0xea地址,收到从机的应答后发送地址0x05,接着收到从机的应答后发送数据0x5a,最后在收到从机应答后,i2c master发送停止信号。
[0035]
进一步的,如图2所示,为i2c master向从机的0x05地址读0x5a数据的时序。首先i2c master产生起始信号,接着发送0xea地址,收到从机的应答信号后发送地址0x05,接着收到从机的应答信号后产生起始信号,然后发送0xeb地址,收到从机的应答信号后发送数据0x5a,最后在收到从机的非应答信号后,i2c master发送停止信号。
[0036]
上述图1、图2所描述的从机通信协议,是靠三根线来来完成通信,分别为sck/sda/int,如果两者的vcc逻辑电平误差小于0.3v,则可以通过下面直连的方式。
[0037]
请参阅图3,图3为本技术实施例提供的一种主机与从机之间的通信系统的结构示意图,所述通信系统包括主机和从机,所述主机与从机之间通过三根线进行通信,具体为:所述三根线包括:sck线、sda线和int线;
[0038]
所述主机的sck_m引脚通过所述sck线直连所述从机的sck_s引脚;所述主机的sda_m引脚通过所述sda线直连所述从机的sda_s引脚;所述主机的int_m引脚通过所述int
线直连所述从机的int_s引脚;所述sck_m引脚、所述sck_s引脚均通过第一电阻r1连接电源vcc;所述sda_m引脚、所述sda_s引脚通过第二电阻r2连接所述电源vcc;
[0039]
在所述主机与所述从机之间的逻辑电平误差的绝对值小于预设阈值时,所述主机通过读取所述int_m引脚的逻辑电平状态判断所述从机的工作状态,在确定所述从机接收所述主机的一整个通信过程完成后,提醒所述主机以i2c标准模式去可读或写所述从机中的中间寄存器的数据,以通过该数据识别通信结果。
[0040]
其中,通信系统包括主机和从机,主机与从机之间通过三根线进行通信,具体为:三根线包括:sck线、sda线和int线,在主机与从机之间的逻辑电平误差的绝对值小于预设阈值时,主机的sck_m引脚通过sck线直连从机的sck_s引脚;主机的sda_m引脚通过sda线直连从机的sda_s引脚;主机的int_m引脚通过int线直连从机的int_s引脚;sck_m引脚、sck_s引脚均通过第一电阻r1连接电源vcc;sda_m引脚、sda_s引脚通过第二电阻连接电源vcc,当从机处于通信空闲工作状态时,int_s引脚输出高电平,当从机处于休眠状态时,int_s引脚输出低电平,主机通过读取int_m引脚的逻辑电平状态判断从机的工作状态,具体为:在通信过程中,如果int_s引脚输出高电平变为低电平的跳变,且低电平持续第一预设时长,则确定从机接收主机的一整个通信过程完成,提醒主机以i2c标准模式去可读从机中的中间寄存器read_reg[n],以通过该read_reg[n]中的数据识别通信结果,能够实现在芯片不支持i2c master以标准模式对从机芯片内的所有寄存器读和写的情况下,实现主机与从机之间通信。
[0041]
其中,第一预设阈值可以预先设置或者系统默认。例如,第一预设阈值为20ms。其中,r1、r2可以均为2.2k。预设阈值可以预先设置或者系统默认,例如,预设阈值可以为0.3v。
[0042]
具体实现中,当从机处于通信空闲工作状态时,int_s引脚会输出高电平;当从机处于休眠状态时,int_s引脚会输出低电平。i2c master通过读取int_m的逻辑电平状态判断从机的工作状态。在通信过程中,如果int_s引脚输出高电平变为低电平的跳变,并且低电平持续20ms,说明从机接收i2c master的一整个通信过程完成了,提醒i2c master应该以i2c标准模式去可读中间寄存器read_reg[n],从而知道此次的通信结果。
[0043]
进一步的,请参与图4,在所述sda_m引脚、所述sda_s引脚之间的逻辑电平误差的绝对值大于或等于所述预设阈值时,所述sda_m引脚通过第三电阻r3连接主机电源master_vcc,该master_vcc通过第四电阻r4连接所述sck_m引脚;
[0044]
所述sda_m引脚连接第一nmos管q1的源极,所述第一nmos管q1的栅极连接从机电源slave_vcc和第二nmos管q2的栅极,以及通过第五电阻r5连接第二nmos管q2的漏极和所述sck_s引脚;所述第一nmos管q1的栅极还通过第六电阻r6连接所述第一nmos管q1的漏极和所述sda_s引脚;所述第二nmos管q2的源极还通过所述第四电阻所述master_vcc;
[0045]
所述主机的int_m引脚通过所述int线直连所述从机的int_s引脚。
[0046]
具体实现中,如i2c master的vcc与slave的vcc压差超过0.3v,需增加电平转换电路,按图4连接。如果master_vcc》slave_vcc,所以nmos寄生二极管由sda_s引脚朝向sda_m引脚和scl_s引脚,同理,两个nmos的g级需接在slave_vcc电源;当master_vcc《slave_vcc时,则可以调整nmos的方向,使其寄生二极管由sda_m引脚朝向sda_s引脚和scl_s引脚,并且两个nmos的g级可以接在master_vcc,进而,通过电平转换电路能够解决因为主从机逻辑
电平差距过大导致的i2c通信质量差甚至通信误判问题,另外,能够保护主从机的系统稳定性,因为主从机逻辑电平差距过大,逻辑电平高的系统会对低电压的系统造成影响。
[0047]
具体实现中,假设这个从机的寄存器都是32bit的寄存器,如果是8bit/16bit寄存器都可以用这个通信协议,只是每次i2c master通信发送的数据不一样,32bit的寄存器是i2cmaster每写/读四个数据,然后在从机程序里组合成一个寄存器地址或寄存器数据,而16bit的寄存器是i2c master每写/读两个数据,组合成一个寄存器地址或寄存器数据,而8bit的寄存器是i2c master每写/读一个数据,组合成一个寄存器地址或寄存器数据。
[0048]
本技术实施例中,为了叙述方便,以32bit的寄存器地址和数据为例。从机有被i2cmaster以标准模式可直接写的write_reg这个中间寄存器,被i2c master以标准模式可读的中间寄存器read_reg[n],下面是这两种中间寄存器代表的介绍:write_reg中间寄存器:寄存器位数为8bit,这是从机里面可以直接被i2c master直接写的寄存器;read_reg[n]中间寄存器:寄存器位数为8bit,这是从机里面可以直接被i2c master直接读的寄存器。
[0049]
可选的,如图5所示,在所述int_m引脚与所述int_s引脚之间的逻辑电平误差的绝对值大于或等于所述预设阈值时,所述int_m引脚通过第七电阻r7连接主机电源master_vcc;所述int_m引脚连接第三nmos管q3的源极,所述第三nmos管q3的栅极连接从机电源slave_vcc和所述第四nmos管q4的栅极,以及通过第九电阻r9连接所述第四nmos管q4的漏极;所述第三nmos管q3的栅极还通过第十电阻r10连接所述第三nmos管q3的漏极和所述int_s引脚;所述第四nmos管q4的源极还通过所述第八电阻r8连接所述master_vcc。
[0050]
具体实现中,如i2c master的vcc与slave的vcc压差超过0.3v,需增加电平转换电路,按图5连接。进而,通过电平转换电路能够解决因为主从机逻辑电平差距过大导致的i2c通信质量差甚至通信误判问题,另外,能够保护主从机的系统稳定性,因为主从机逻辑电平差距过大,逻辑电平高的系统会对低电压的系统造成影响。
[0051]
本技术实施例中,从机通信协议大致流程可以如下:即可以包括写操作a和读操作b。
[0052]
可选的,所述写操作a包括:
[0053]
如果所述主机要往所述从机某个寄存器地址写入数据,把该操作记为所述写操作a,则一整个所述写操作a通信周期包括6个i2c标准写周期和1个i2c标准读周期;整个通信过程包括7个i2c标准周期;所述主机向所述从机的write_reg中间寄存器做6次写入数据的操作,再做一次读read_reg[n]中间寄存器的操作,以完成所述写操作a。
[0054]
写操作a:如果是i2c master要往从机某个寄存器地址写入数据,把此操作记为写操作a,则完成一整个写操作a通信周期需要6个i2c标准写周期和1个i2c标准读周期,整个通信过程需要7个i2c标准周期,也就是i2c master要向从机write_reg中间寄存器做6次写入数据的操作,再做一次读read_reg[n]中间寄存器的操作。
[0055]
可选的,所述读操作b包括:
[0056]
如果所述主机读取所述从机某个寄存器地址对应的数据,将该操作记为所述读操作b,则一整个读操作b通信周期包括2个i2c标准写周期和5个i2c标准读周期;整个通信过程需要7个i2c标准周期;所述主机先向所述从机的write_reg中间寄存器做2次写入数据的操作,再向所述从机read_reg[n]中间寄存器做5次读取数据的操作,以完成所述读操作b。
[0057]
读操作b:如果是主机要读取从机某个寄存器地址对应的数据,把此操作记为读操作b,则完成一整个读操作b通信周期需要2个i2c标准写周期和5个i2c标准读周期,整个通信过程需要7个i2c标准周期,也就是i2c master先向从机write_reg中间寄存器做2次写入数据的操作,再向从机read_reg[n]中间寄存器做5次读取数据的操作。
[0058]
此从机通信协议,如图6所示,从机通信协议的数据流程示意图如下,流程是按照1-5顺序执行的。模块2是直接对i2c master可见以及可操作的,模块3和模块4为i2cmaster不可见以及不可操作,模块3和模块4根据模块2的数据和状态位进行相应的逻辑操作,具体逻辑操作可以看下面写操作a和读操作b通信的具体实现流程,并且把通信结果值返回到模块2,从而间接实现了i2c master对从机所有寄存器的操作。
[0059]
具体实现中,从机程序实时判断是否有i2c写中断标志,当有i2c master向从机写一个数据时,从机程序就会判断有i2c中断标志,从而从机程序会进入i2c中断服务函数。
[0060]
其中,还可以建立从机寄存器寻址地址addr1和从机寄存器真实地址addr2的映射表,比如i2c master要读取从机寄存器真实地址0x1234的数据,如果把从机真实地址0x1234当做数据来传输,则需要4个i2c标准周期来传输。但把真实地址0x1234映射为寻址地址0x1,则只需要一个i2c标准周期就可以传输这个寻址地址0x1。这个映射表记为addr_info[n],这个n就是从机寄存器的寻址地址。
[0061]
具体实现中,可以设一个变量i2c_irq_count,代表i2c master向从机每次写周期进入i2c中断服务函数的次数。每次进入i2c中断服务函数,变量i2c_irq_count数值加1,这个i2c_irq_count数值在后面起到了检验作用。分两种情况:1、如果是写操作a,当i2c_irq_count=1时,代表i2c master向从机已完整写下一个8bit的数据了,这个8bit的数据记作write_mode;2、如果是读操作b,当i2c_irq_count=1时,代表i2c master向从机已完整写下一个8bit的数据了,这个8bit的数据记作read_mode。
[0062]
本技术实施例中,write_mode/read_mode的具体含义如下:这两个数据的最高位bit7为1代表这次主机是写操作a,最高位bit7为0代表这次主机是读操作b,从机程序根据最高位bit7位分辩此次主机是写操作a还是读操作b;write_mode/read_mode剩下的7位bit的数据代表着这次i2c master操作的秘钥,写操作a和读操作b各自拥有一个7位bit数据的秘钥,只有i2c master主机向从机写的7位bit数据和从机的秘钥对得上,才能继续通信下去,如果秘钥不对应,则通信失败,从机对i2c master操作不做应答,而且这套秘钥是按照一定的规则动态变化的。
[0063]
具体实现中,当i2c master进行读操作b时,需要进行如下的操作逻辑:i2c master需要先向从机write_reg中间寄存器写2次数据。从机软件会在每次i2c写中断进入了i2c中断服务函数,都会把write_reg中间寄存器的数据保存在system_info[n],第一个数据记作read_mode,第二个数据记作从机寄存器的地址addr,从机软件上会根据addr对从机片内寄存器寻址,然后把对应寄存器里面的数据取出来,把取出来的数据按照8bit格式分成四个数据和i2c_irq_count的值放在read_reg[n]中间寄存器,这个i2c_irq_count的值就是做通信校验使用;当i2c_irq_count=2时,从机程序会把int_s引脚拉低30ms,再重新拉高int_s,i2c master捕捉到int_s的变化,i2c master这时就会连续五次读取从机read_reg[n]中间寄存器的数据,其中read_reg[0]中间寄存器装载着是i2c_irq_count的值,可以通过读取这个值校验此次通信是否有效,read_reg[1]-read_reg[4]合起来的
32bit数据即为i2c master要读的寄存器地址所对应的数据。
[0064]
具体实现中,当i2c master进行写操作a时,需要进行如下的操作逻辑:i2c master需要向从机write_reg中间寄存器写6次数据。从机程序会在每次i2c写中断进入了i2c中断服务函数,都会把write_reg中间寄存器的数据保存在system_info[n],第一个数据记作write_mode,第二个数据记作从机寄存器的地址addr,第三到第六这四个数据根据格式会合成一个32bit的数据,记作要写入从机寄存器地址的数据data,从机程序先根据addr对从机片内寄存器寻址,然后把data赋值给从机这个寄存器地址所对应的寄存器,并把此时i2c_irq_count的值放到read_reg[0]中间寄存器;当i2c_irq_count=6时,从机程序会把int_s引脚拉低30ms,再重新拉高int_s,i2c master捕捉到int_s的变化,i2c master就会读取一次从机read_reg[0]中间寄存器的数据,可以通过读取这个值校验此次通信是否有效。
[0065]
可选的,所述int_s引脚,用于在通信空闲时,且不是所述从机待机时,输出高电平;当所述从机进入待机时,输出低电平;
[0066]
和/或,
[0067]
所述从机每次写操作a,或者,读操作b完成时,所述从机拉低所述int_s引脚第二预设时长,以通知所述主机本次通信已经完成;所述写操作a包括6个i2c标准写周期和1个i2c标准读周期;所述读操作b包括2个i2c标准写周期和5个i2c标准读周期;
[0068]
和/或,
[0069]
实现所述主机唤醒所述,具体为:当所述int_s引脚持续低电平的时间超过指定时长时,所述主机给高电平给所述int_s引脚,以唤醒所述从机。
[0070]
其中,第二预设时长可以预先设置或者系统默认,例如,第二预设时长为30ms,指定时长也可以预先设置或者系统默认,例如,指定时长为1s。
[0071]
具体实现中,在通信空闲时,且不是从机待机时,会输出高电平;当从机进入待机时,会输出低电平,从机每次写操作a/读操作b完成时,从机会拉低int_s引脚30ms,从而通知i2c master这次通信已经完成了,进而执行接下来的操作。另外,可以作为i2c master唤醒从机的作用,当int_s引脚持续低电平1s时,这个时候i2c master给个高电平给int_s引脚,从而唤醒从机。
[0072]
举例说明下,如图7所示,图7是本技术实施例提供的一种i2c master向从机寄存器读数据流程示意图,具体如下:i2c主机读操作b开始,i2c主机先往从机write_reg中间寄存器连续写一次数据,从机判断读操作秘钥是否匹配?若否,则执行i2c主机读操作b开始的步骤,若是,i2c主机继续往从机write_reg中间寄存器写入1次数据,记作addr,从机会把寄存器地址为addr的数据赋值给read_reg[1]-read_reg[4],i2c主机再对read_reg[0]-read_reg[4]进行读取,即可得到寄存器地址对应的数据和检验通信过程,结束。
[0073]
再举例说明下,如图8所示,图8是本技术实施例提供的一种i2c master向从机寄存器写数据流程示意图,具体如下:i2c主机写操作a开始,i2c主机先往从机write_reg中间寄存器连续写一次数据,从机判断写操作秘钥是否匹配?若否,执行i2c主机写操作a开始的步骤,若是,i2c主机继续往从机write_reg中间寄存器写入5次数据,记作addr和data,从机根据addr对寄存器寻址,并把data赋给这个寄存器,i2c主机再对寄存器地址为read_reg[0]进行读取,校验通信过程,结束。
[0074]
再举例说明下,如图9所示,图9是本技术实施例提供的一种主程序通信流程示意图,具体如下:主程序开始,装载addr_info[n],读写秘钥,系统初始化配置,从机实时判断是否有i2c写中断?若否,执行装载addr_info[n],读写秘钥,系统初始化配置的步骤,若是,第一次进入i2c中断函数,把主机写入的数据赋给write_reg中间寄存器,判断write_reg寄存器的数据?
[0075]
进一步,执行写操作a流程,判断通信时间是否超过1s?若是,通信失败,若否,判断此次通信是否完成?若是,i2c各参数初始,返回主程序开始重新等待i2c主机通信,若否,执行写操作a流程。
[0076]
进一步,执行读操作b流程,判断通信时间是否超过1s?若是,通信失败,若否,判断此次通信是否完成?若是,i2c各参数初始,返回主程序开始重新等待i2c主机通信,若否,执行读操作b流程。
[0077]
进一步的,本技术实施例中,还提供一种通信方法,应用于上述图3或者图4所述的主机与从机之间的通信系统,该方法可以包括如下步骤:
[0078]
s1、当所述主机进行写操作a,完成一整个通信过程后的i2c_irq_count为6,确定所述从机已经接收到了所述主机写入的6个8bit数据,其中,该6个8bit数据包括:一个8bit数据为write_mode、一个8bit的addr和一个32bit的data;所述i2c_irq_count表示所述主机向所述从机每次写周期进入i2c中断服务函数的次数;所述写操作a包括6个i2c标准写周期和1个i2c标准读周期;
[0079]
s2、当完整一个写操作a完成后,如果所述主机读取到的read_reg[0]中间寄存器值不是6,则说明通信异常;
[0080]
s3、当所述主机进行读操作b,完成一整个通信过程后的i2c_irq_count为2,确定所述从机接收到所述主机写入的2个8bit数据,所述2个8bit数据包括一个8bit的read_mode和一个8bit的addr;所述读操作b包括2个i2c标准写周期和5个i2c标准读周期;
[0081]
s4、当完整一个读操作b完成后,如果所述主机读取到的read_reg[0]中间寄存器值不是2,则说明通信异常。
[0082]
本技术实施例中,当i2c master进行写操作a,完成一整个通信过程后的i2c_irq_count应该为6,这时从机已经接受到了主机写入的6个8bit数据,一个write_mode(8bit),一个addr(8bit),一个data(32bit)。同理当i2c master进行读操作b,完成一整个通信过程后的i2c_irq_count应该为2,这时从机已经接收到了主机写入的2个8bit数据,一个read_mode(8bit),一个addr(8bit)。当完整一个写操作a完成后,如果i2c master这个时候读取到的read_reg[0]中间寄存器值不是6。当完整一个读操作b完成后,如果i2cmaster这个时候读取到的read_reg[0]中间寄存器值不是2;当出现上面两种情况后,可以知道此次通信出了问题,此时应该重新发起通信,这就是从机协议的通信检验,这可以验证从机程序是否按照预想的逻辑在跑;这可以增加此次通信的可靠性,每次当i2c master操作从机的一个寄存器,从机程序会配合主机验证此次操作是否正常进行下去了。
[0083]
进一步的,还可以包括如下步骤:
[0084]
s5、每次所述主机首次通信第一次向从机写入的数据,采用write_mode或者read_mode表示,除了最高位bit7代表写操作a或读操作b,剩余的7位bit代表着此次操作的秘钥;
[0085]
s6、首次所述主机写操作a和所述读操作b的秘钥是所述从机内部固定初始的秘
钥,该首次是指所述从机从待机到唤醒时,接收到所述主机的第一个数据,后面通信的秘钥会按照预设规则变化;
[0086]
s7、若所述write_mode或者所述read_mode不匹配所述预设规则,则确定所述秘钥不匹配,反之,则确定所述秘钥匹配。
[0087]
具体实现中,每次i2c master首次通信第一次向从机写入的数据,记作write_mode/read_mode,除了最高位bit7代表写操作a或读操作b,剩余的7位bit代表着此次操作的秘钥。首次i2c master写操作a和读操作b的秘钥是从机内部固定初始的秘钥,这里首次的意思是从机从待机到唤醒时,接收到i2c master的第一个数据。后面通信的秘钥会按照一定的规则开始变化。
[0088]
可选的,在所述写操作a固定初始写秘钥为0x7f,二进制为:0111 1111时,所述预设规则为,主机每往从机写入一个数据,会把初始写秘钥0x7f从最低位到第七位叠加逐步取反,第二次写操作a是最低一位取反,第三次写操作a是低二位取反,第八次写操作a是低七位取反,然后记前八次写操作a的密钥数据为keys1,keys1为0x00,第九次写操作a是把keys1最低一位取反,如此类推,第十五次写操作a是把keys1低七位全部取反,然后记第十五次写操作a的密钥数据为keys2,显而易见,keys2就是初始写秘钥0x7f,然后按照上述规则动态周期变化:
[0089]
首次i2c master写操作a和读操作b的秘钥是从机内部固定初始的秘钥,这里首次的意思是从机从待机到唤醒时,接收到i2c master的第一个数据。后面通信的秘钥会按照一定的规则动态开始变化。
[0090]
本技术实施例中,假设:从机程序写操作a固定初始写秘钥为0x7f,二进制为:0111 111从机程序读操作b固定初始读秘钥为0x00,二进制为:0000 0000,则可得写操作a的秘钥变化规则:
[0091]
当i2c master第一次写操作a时,write_mode数据应该为:0xff,对应写秘钥为0x7f;
[0092]
当i2c master第二次写操作a时,write_mode数据应该为:0xfe,对应写秘钥为0x7e;
[0093]
当i2c master第八次写操作a时,write_mode数据应该为:0x80,对应写秘钥为0x00;
[0094]
当i2c master第十次写操作a时,write_mode数据应该为:0x83,对应写秘钥为0x03;
[0095]
当i2c master第十五次写操作a时,write_mode数据应该为:0xff,对应写秘钥为0x7f;
[0096]
可选的,在所述读操作b固定初始读秘钥为0x00,二进制为:0000 0000时,所述预设规则为,主机每往从机读一个数据,会把初始读秘钥0x00从最低位到第七位叠加逐步取反,第二次读操作b是最低一位取反,第三次读操作b是低二位取反,第八次读操作b是低七位取反,然后记前八次读操作b的密钥数据为keys3,keys3为0x7f,第九次读操作b是把keys3最低一位取反,如此类推,第十五次读操作b是把keys3低七位全部取反,然后记第十五次读操作b的密钥数据为keys4,显而易见,keys4就是初始读秘钥0x00,然后按照上述规则动态周期变化:
[0097]
本技术实施例中,可得读操作b的秘钥变化规则:
[0098]
当i2c master第一次读操作b时,read_mode数据应该为:0x00,对应写秘钥为0x00;
[0099]
当i2c master第二次读操作b时,read_mode数据应该为:0x01,对应写秘钥为0x01;
[0100]
当i2c master第八次读操作b时,read_mode数据应该为:0x7f,对应写秘钥为0x7f;
[0101]
当i2c master第十二读操作b时,read_mode数据应该为:0x70,对应写秘钥为0x70;
[0102]
当i2c master第十五读操作b时,read_mode数据应该为:0x00,对应写秘钥为0x00。
[0103]
实际应用中,如此循环往复,每15个完整写操作a/读操作b为一个秘钥变化周期t,变化规则每次是从第一位bit到第七位bit取反变化,变化的位数取决于写操作a/读操作b的次数,到最高位bit7变化取反后,又重新从开始bit0开始取反变化。
[0104]
总之,上述过程中,如果write_mode/read_mode不匹配这个规则,则从机判断为秘钥不匹配,从而结束此次通信。
[0105]
可选的,还可以包括如下情况:
[0106]
当所述i2c_irq_count不为0时,所述从机开始计时,如果所述指定时长内没完成一个写操作a或一个读操作b,则确定通信异常,将error1数据放在read_reg[0]中;
[0107]
和/或,
[0108]
当所述写操作a秘钥不对应时,则确定通信异常,将error2数据放在read_reg[0]中;
[0109]
和/或,
[0110]
当所述读操作b秘钥不对应时,则确定通信异常,将error3数据放在read_reg[0]中;
[0111]
和/或,
[0112]
当所述主机进行所述写操作a,正常通信成功的所述i2c_irq_count为6,当所述主机进行所述读操作b,正常通信成功的所述i2c_irq_count为2。
[0113]
本技术实施例中,当i2c_irq_count不为0时,从机程序会开始计时,如果1s内都没完成整个通信(完成一个写操作a或一个读操作b),则从机会认为此次通信出现问题了,从机程序会把error1数据放在read_reg[0]中,并且结束此次通信。
[0114]
其中,当写操作a秘钥不对应时,从机程序会把error2数据放在read_reg[0]中,并且结束此次通信。
[0115]
其中,当读操作b秘钥不对应时,从机程序会把error3数据放在read_reg[0]中,并且结束此次通信。
[0116]
其中,当i2c master进行写操作a,正常通信成功的i2c_irq_count应该为6;同理当i2c master进行读操作b,正常通信成功的i2c_irq_count应该为2;当正常通信完成后,如果读取到的read_reg[0]中间寄存器值与这两个常值不一样,可以知道通信出了问题,并且结束此次通信,这就是从机协议的通信检验,这可以验证从机程序是否按照预想的逻辑
在跑。
[0117]
具体实现中,针对异常通信的情况,i2c master可以通过读取read_reg[0]中间寄存器,知道是哪种异常情况发生了。
[0118]
本技术实施例中,还可以提供一种芯片,其可以包括上述图3或图4或图5所述的通信系统,以及可以执行上述任一通信方法。
[0119]
本技术实施例中,还可以提供一种电子设备,其可以包括上述图3或图4或图5所述的通信系统,以及可以执行上述任一通信方法,或者,该电子设备可以包括上述芯片,其可以执行上述任一通信方法。
[0120]
以上是本技术实施例的实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本技术的保护范围。
技术特征:
1.一种主机与从机之间的通信系统,其特征在于,所述通信系统包括主机和从机,所述主机与从机之间通过三根线进行通信,具体为:所述三根线包括:sck线、sda线和int线;所述主机的sck_m引脚通过所述sck线直连所述从机的sck_s引脚;所述主机的sda_m引脚通过所述sda线直连所述从机的sda_s引脚;所述主机的int_m引脚通过所述int线直连所述从机的int_s引脚;所述sck_m引脚、所述sck_s引脚均通过第一电阻r1连接电源vcc;所述sda_m引脚、所述sda_s引脚通过第二电阻r2连接所述电源vcc;在所述主机与所述从机之间的逻辑电平误差的绝对值小于预设阈值时,所述主机通过读取所述int_m引脚的逻辑电平状态判断所述从机的工作状态,在确定所述从机接收所述主机的一整个通信过程完成后,提醒所述主机以i2c标准模式去可读或写所述从机中的中间寄存器的数据,以通过该数据识别通信结果。2.根据权利要求1所述的通信系统,其特征在于,在所述sda_m引脚、所述sda_s引脚之间的逻辑电平误差的绝对值大于或等于所述预设阈值时,所述sda_m引脚通过第三电阻r3连接主机电源master_vcc,该master_vcc通过第四电阻r4连接所述sck_m引脚;所述sda_m引脚连接第一nmos管q1的源极,所述q1的栅极连接从机电源slave_vcc和第二nmos管q2的栅极,以及通过第五电阻r5连接所述第二nmos管q2的漏极和所述sck_s引脚;所述第一nmos管q1的栅极还通过第六电阻r6连接所述第一nmos管q1的漏极和所述sda_s引脚;所述第二nmos管q2的源极还通过所述第四电阻r4连接所述master_vcc;所述主机的int_m引脚通过所述int线直连所述从机的int_s引脚。3.根据权利要求1或2所述的通信系统,其特征在于,在所述int_m引脚与所述int_s引脚之间的逻辑电平误差的绝对值大于或等于所述预设阈值时,所述int_m引脚通过第七电阻r7连接主机电源master_vcc;所述int_m引脚连接第三nmos管q3的源极,所述第三nmos管q3的栅极连接从机电源slave_vcc和所述第四nmos管q4的栅极,以及通过第九电阻r9连接所述第四nmos管q4的漏极;所述第三nmos管q3的栅极还通过第十电阻r10连接所述第三nmos管q3的漏极和所述int_s引脚;所述第四nmos管q4的源极还通过所述第八电阻r8连接所述master_vcc。4.根据权利要求1或2所述的通信系统,其特征在于,所述int_s引脚,用于在通信空闲时,且不是所述从机待机时,输出高电平;当所述从机进入待机时,输出低电平;和/或,所述主机每次写操作a,或者,读操作b完成时,所述从机拉低所述int_s引脚第二预设时长,以通知所述主机本次通信已经完成;所述写操作a包括6个i2c标准写周期和1个i2c标准读周期;所述读操作b包括2个i2c标准写周期和5个i2c标准读周期;和/或,实现所述主机唤醒所述,具体为:当所述int_s引脚持续低电平的时间超过指定时长时,所述主机给高电平给所述int_s引脚,以唤醒所述从机。5.根据权利要求4所述的通信系统,其特征在于,所述写操作a包括:如果所述主机要往所述从机某个寄存器地址写入数据,把该操作记为所述写操作a,则一整个所述写操作a通信周期包括6个i2c标准写周期和1个i2c标准读周期;整个通信过程包括7个i2c标准周期;所述主机向所述从机的write_reg中间寄存器做6次写入数据的操作,再做一次读read_reg[n]中间寄存器的操作,以完成所述写操作a。
6.根据权利要求4所述的通信系统,其特征在于,所述读操作b包括:如果所述主机读取所述从机某个寄存器地址对应的数据,将该操作记为所述读操作b,则一整个读操作b通信周期包括2个i2c标准写周期和5个i2c标准读周期;整个通信过程需要7个i2c标准周期;所述主机先向所述从机的write_reg中间寄存器做2次写入数据的操作,再向所述从机read_reg[n]中间寄存器做5次读取数据的操作,以完成所述读操作b。7.一种通信方法,其特征在于,应用如权利要求1-5任一项所述的主机与从机之间的通信系统,所述方法包括:当所述主机进行写操作a,完成一整个通信过程后的i2c_irq_count为6,确定所述从机已经接收到了所述主机写入的6个8bit数据,其中,该6个8bit数据包括:一个8bit数据为write_mode、一个8bit的addr和一个32bit的data;所述i2c_irq_count表示所述主机向所述从机每次写周期进入i2c中断服务函数的次数;所述写操作a包括6个i2c标准写周期和1个i2c标准读周期;当完整一个写操作a完成后,如果所述主机读取到的read_reg[0]中间寄存器值不是6,则说明通信异常;当所述主机进行读操作b,完成一整个通信过程后的i2c_irq_count为2,确定所述从机接收到所述主机写入的2个8bit数据,所述2个8bit数据包括一个8bit的read_mode和一个8bit的addr;所述读操作b包括2个i2c标准写周期和5个i2c标准读周期;当完整一个读操作b完成后,如果所述主机读取到的read_reg[0]中间寄存器值不是2,则说明通信异常。8.根据权利要求7所述的方法,其特征在于,所述方法还包括:每次所述主机首次通信第一次向从机写入的数据,采用write_mode或者read_mode表示,除了最高位bit7代表写操作a或读操作b,剩余的7位bit代表着此次操作的秘钥;首次所述主机写操作a和所述读操作b的秘钥是所述从机内部固定初始的秘钥,该首次是指所述从机从待机到唤醒时,接收到所述主机的第一个数据,后面通信的秘钥会按照预设规则变化;若所述write_mode或者所述read_mode不匹配所述预设规则,则确定所述秘钥不匹配,反之,则确定所述秘钥匹配。9.根据权利要求8所述的方法,其特征在于,在所述写操作a固定初始写秘钥为0x7f,二进制为:0111 1111时,所述预设规则为:所述主机每往所述从机写入一个数据,将所述初始写秘钥0x7f从最低位到第七位叠加逐步取反,第二次写操作a是最低一位取反,第三次写操作a是低二位取反,第八次写操作a是低七位取反;记前八次写操作a的密钥数据为keys1,该keys1为0x00,第九次写操作a将所述keys1最低一位取反;第十五次写操作a将所述keys1低七位全部取反,记第十五次写操作a的密钥数据为keys2;keys2就是初始写秘钥0x7f;当所述主机第一次写操作a时,write_mode数据为:0xff,对应写秘钥为0x7f;当所述主机第二次写操作a时,write_mode数据为:0xfe,对应写秘钥为0x7e;当所述主机第八次写操作a时,write_mode数据为:0x80,对应写秘钥为0x00;当所述主机第十次写操作a时,write_mode数据为:0x83,对应写秘钥为0x03;当所述主机第十五次写操作a时,write_mode数据为:0xff,对应写秘钥为0x7f。10.根据权利要求9所述的方法,其特征在于,在所述读操作b固定初始读秘钥为0x00,
二进制为:0000 0000时,所述预设规则为:所述主机每往所述从机读一个数据,将所述初始读秘钥0x00从最低位到第七位叠加逐步取反,第二次读操作b是最低一位取反,第三次读操作b是低二位取反,第八次读操作b是低七位取反,记前八次读操作b的密钥数据为keys3,该keys3为0x7f,第九次读操作b是把keys3最低一位取反;第十五次读操作b将keys3低七位全部取反,记第十五次读操作b的密钥数据为keys4,所述keys4就是初始读秘钥0x00;当所述主机第一次读操作b时,read_mode数据为:0x00,对应写秘钥为0x00;当所述主机第二次读操作b时,read_mode数据为:0x01,对应写秘钥为0x01;当所述主机第八次读操作b时,read_mode数据为:0x7f,对应写秘钥为0x7f;当所述主机第十二读操作b时,read_mode数据为:0x70,对应写秘钥为0x70;当所述主机第十五读操作b时,read_mode数据为:0x00,对应写秘钥为0x00。
技术总结
本申请提供了一种主机与从机之间的通信系统和通信方法;该系统有三根线:SCK、SDA、INT;主机和从机的逻辑电平的绝对值误差小于预设阈值时,三根线直连;主机和从机的逻辑电平的绝对值误差大于预设阈值时,通过两个NMOS管来转换通信电平,实现可靠通信;主机通过对从机内部的中间寄存器write_reg和read_reg[N]与从机数据交互,从机通过检测主机对其有操作的发生,在从机内部进行协议逻辑处理,操作从机所有的真实寄存器,把结果返回给中间寄存器read_reg[N],主机再通过读取相应数据,完成一整个通信流程,在整个主机和从机通信过程中,有自校验、加密功能、超时功能、唤醒功能。唤醒功能。唤醒功能。
技术研发人员:卓明锋
受保护的技术使用者:深圳英集芯科技股份有限公司
技术研发日:2023.03.29
技术公布日:2023/7/25
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:一种球头高低温疲劳检测机 下一篇:一种光伏支架结构的制作方法
