一种芯片自动化外设协议选择的方法与流程

文档序号:11154935阅读:700来源:国知局
一种芯片自动化外设协议选择的方法与制造工艺
本发明涉及芯片外设接口设计,特别涉及一种芯片外设接口自动化选择方法。
背景技术
:在当前的芯片设计中,中低速的数据传输协议主要有SDIO和SPI。其中SPI(SerialParallelInterface)协议是一种同步串行通信协议,最早由摩托罗拉公司开发,该协议最少只需要4根信号管脚,包括一根使能信号(SPI_CSN),一根时钟信号(SPI_CLK),一根主输出从输入信号(SPI_MOSI),一根主输入从输出信号(SPI_MISO)。在某些需要中断应用的场景里也会加上中断信号(SPI_INT)。目前SPI接口协议在中低速数据通信、芯片控制信号传输领域得到了广泛的应用。SPI接口的信号连接图如图1所示。SDIO接口协议由SD卡协会制定,有着较为严格的传输协议,因此不同器件之间的兼容性有保障,同样广泛应用在芯片间通信。SDIO2.0/3.0接口协议上共有6根信号线,包括一根命令传输线,一根时钟信号线,4根数据传输线。除了时钟线由SDIOHOST驱动,其余5根信号线均为双向信号线。SDIO接口的信号连接图如图2所示。由于SDIO与SPI通信协议的广泛应用,目前的芯片设计中,有不少芯片同时采用了这两种外设通信协议,但在具体应用中往往只需要采用一种接口,因此如果采用不同芯片管脚分别用于SDIO和SPI接口的方式会造成芯片管脚数量增加,进而导致封装和系统板成本增加。目前不少芯片虽然将SDIO及SPI接口进行了复用,但还需要通过其它配置管脚或者其它外设通讯接口来进行接口选择,无法根据外部实际连接端口自动选择接口协议。技术实现要素:为解决上述存在的技术问题而提出了本发明。本发明提出了一种芯片外设接口自动化选择方法,包括:S1:根据SDIO信号和SPI信号与初始传输方向选择管脚复用的搭配,确保在初始化时不出现信号重复驱动的问题;S2:制定一种SPI的传输协议,使其既能够兼容于通用的SPIHOST,又不会与所有的SDIO命令相混淆,确保在初始化时能够正确判断HOST接口的类型;S3:指定一组芯片初始化后的SDIO接口和SPI接口的初始化序列,用于表明向芯片外部的HOST端是SDIO接口还是SPI接口;S4:在芯片数字电路中增加一个状态机,用于记录收到的初始化序列,并根据所述初始序列判断接口类型,然后关闭没有启用的接口。优选地,所述SDIO接口初始序列为SDIO协议规定HOST发出的第一个命令CMD0;优选地,所述SPI接口的初始化序列为SPI协议规定HOST发出的第一个命令,所述第一命令为2B12;优选地,所述SPI的传输协议包括:<1>当SPI接口的SPI_CSN信号为低时表示进行SPI传输;<2>SPI主设备和从设备均在时钟上升沿进行采数;<3>所有传输均由SPI主设备发起,主设备通过SPI_MOSI线发出的前4bit数据为SPI命令字,当命令字为“1100”时表示主设备读数据,为“1001”时表示主设备写数据;为“1000”时表示同时进行读写数据操作;<4>完成传输后在SPI_MOSI或者SPI_MISO上开始传输应用数据。优选地,所述SPI的传输协议的每次传输前2比特与所述SDIO协议的每次传输前2比特均不相同;优选地,所述SPI传输在第一次出现0后下一比特依然为0,这样使SPI传输与SDIO传输区分开。本发明提供了一种芯片外设接口自动化选择方法,通过合理地分配信号管脚的复用,定制SPI接口通信协议与初始化序列,最终通过软/硬件的状态机根据外部HOST类型来选择合适的接口协议。采用本方法可以大大减小芯片为了兼容SDIO/SPI接口所带来的多余管脚以及其他软硬件代价,提升芯片的竞争力。附图说明图1是本发明芯片外设接口自动化选择方法的流程图;图2是本发明芯片外设接口自动化选择方法中SPI模式下接口连接图;图3是本发明芯片外设接口自动化选择方法中SDIO模式下接口连接图;图4是本发明芯片外设接口自动化选择方法的SPI传输协议波形图;图5是本发明芯片外设接口自动化选择方法的外设接口开启状态机状态转换图。具体实施方式为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步的详细说明。本发明提出了一种芯片外设接口自动化选择的方法,如图1的流程图所示,包括:S1:根据SDIO信号和SPI信号与初始传输方向选择管脚复用的搭配,确保在初始化时不出现信号重复驱动的问题。表1列举了SDIO接口与SPI接口各个信号管脚及其在芯片初始化后的驱动方向。*:初始化后先由HOST输出命令给SDIOdevice,随后再由device回复,因此开始阶段由HOST驱动。**:数据传输方向由HOST发出的命令决定,因此开始阶段数据线上无信号驱动,由上拉电阻进行弱上拉。根据表1中各个端口的驱动方向设计了一组特定的端口复用配置,如表2所示。接口PAD0PAD1PAD2PAD3PAD4PAD5SDIOCLKCMDDAT[0]DAT[1]DAT[2]DAT[3]SPISPI_CLKSPI_MOSISPI_CSNSPI_INTSPI_MISO在本发明实施例中,PAD0分别用于SDIO和SPI接口的时钟输入,均由外部接口HOST端来驱动。这样不但可以避免出现驱动方向的问题,还有利于芯片设计过程中的时钟树生成,防止由于时钟信号与数据信号混用而导致的时序检查问题。PAD1分别用于SDIO接口的CMD信号与SPI接口的MOSI信号,在芯片初始化后,这两个信号均先由外部HOST设备驱动,并且负责传输出初始化序列。PAD2分别用于SDIO接口的DAT[0]信号和SPI接口的CSN信号,在芯片初始化后,SDIO的DAT[0]信号暂时不会有端口驱动,只有在接收完CMD信号并启动数据传输后才会有驱动,而SPI的CSN端口在传输启动序列时HOST端会将该信号拉低,但也不会引起SDIO模块产生误处理。PAD3用于SDIO接口的DAT[1]信号和SPI接口的SPI_INT信号,这两个信号在启动序列时均不会有驱动,因此不会引发驱动冲突,由于DAT[1]信号在SDIO单比特传输时是作为中断信号线的,因此将其与SPI接口的中断线复用。PAD4用于SDIO接口的DAT[2]信号和SPI接口的SPI_MISO信号,这两个信号在启动序列时均不会有驱动,因此不会引发驱动冲突。PAD5用于SDIO接口的DAT[3]信号,因为SPI接口的端口数量小于SDIO接口,因此该信号不需要与SPI接口信号复用。从说明中可以看到,端口复用中PAD0,PAD1与PAD2上的复用配置是最为关键的,不可以随意改变;而PAD3,PAD4,PAD5上的复用配置相对不重要,可以根据实际需求进行替换。如可以将配置改为PAD3用于SDIO的DAT[1],PAD4用于SDIO的DAT[2]与SPI接口的SPI_INT信号,PAD4用于SDIO的DTA[3]与SPI接口的SPI_MISO信号。S2:制定一种SPI的传输协议,使其既能够兼容于通用的SPIHOST,又不会与所有的SDIO命令相混淆,确保在初始化时能够正确判断HOST接口的类型;在本发明实施例中,对于SPI从设备而言,需要主设备端(HOST端)通过MOSI端给予一个命令后再进行相应操作,命令的格式不同的设备可以有不同的定义。在本发明中,由于MOSI信号要同SDIO接口的CMD信号复用,因此定义的命令格式不可以让SDIO接口模块将其认为是SDIO命令,防止产生误操作而SDIO接口的命令格式均根据SDIO接口协议的定义而来,SDIO3.0协议定义的SDIOCMD格式为:SbitDbitCMDIndexCMDdataCRC7Ebit1163271在本发明实施例中,Sbit为起始位,固定为0;Dbit为方向值,对于SDIO命令而言固定为1;CMDindex为命令的二进制值;CMDdata为CMD的配置值,如读取/写入操作的地址信息等,不同的CMD不同的情况下会有不同的值;CRC7为该命令的CRC校验值,防止命令传输中出现错误;Ebit为结束位,固定为1。根据SDIO命令的特点,将SPI传输的协议定义如下,波形图如图3所示:<1>当SPI接口的SPI_CSN信号为低时表示进行SPI传输;<2>SPI主设备和从设备均在时钟上升沿进行采数;<3>所有传输均由SPI主设备发起,主设备通过SPI_MOSI线发出的前4bit数据为SPI命令字,当命令字为“1100”时表示主设备读数据,为“1001”时表示主设备写数据;为“1000”时表示同时进行读写数据操作;<4>完成命令传输后在SPI_MOSI或者SPI_MISO上开始传输应用数据。在本发明实施例中,SPI每次传输的前2比特与SDIO的CMD前2比特均不相同;另外在SDIO模块中,由于缺乏传输使能线(CS),实际上是由SDIO_CMD线拉低来表示传输的开始,而在本发明中,所有SPI传输在第一次出现“0”后下一比特依然为“0”,保证了该传输不会被误认为是SDIO传输。S3:指定一组芯片初始化后的SDIO接口和SPI接口的初始化序列,用于表明向芯片外部的HOST端是SDIO接口还是SPI接口,优选地,SDIO接口序列为协议规定HOST发出的第一个命令CMD0。在本发明实施例中,根据SDIO协议,SDIO接口需要初始化后才能与HOST端通信,而接口初始化的第一个命令是CMD0(使SDIO进入IDLE状态),因此当芯片SDIO模块收到CMD0后芯片便可判定外部接口为SDIO,并关闭SPI模块,防止出现错误通信或者误操作。在本发明实施例中,对于SPI接口,我们定义HOST在使用片上SPI模块前需要先输入一个16进制值为“2B12”,二进制值为“0010101100010010”的串行数据。选用该值的原因有:(a)该值前4比特为“0010”,根据上文定义的SPI协议,普通SPI操作的前4比特只可能为“1100”、“1001”及“1000”,不包括“0010”,因此不会触发SPI模块进行数据传输操作。(b)该值前2比特为00,而所有的SDIO命令前2比特均为“01”,因此与SDIO命令操作的前2比特不同,不会与SDIO命令相混淆。(c)如果开始传输的第2比特受干扰由“0”成为“1”,前2比特就与SDIO传输命令相同,但随后的6比特数据“101011”与目前合法的SDIO命令均不重合,保证不会被误认为是SDIO命令。(d)在传输的前面8比特数据能够保证不会被SDIO模块误操作后,本发明还在SPI初始化序列中添加了后8比特数据“00010010”,主要是为了保证该序列确实由HOST端有意发出,并非无意触发。防止HOST端有其他外设与SPI共用管脚时发生误操作。S4:在芯片数字电路中增加一个状态机,用于记录收到的初始化序列,并根据所述初始序列判断接口类型,然后关闭没有启用的接口。图4是本发明芯片外设接口自动化选择方法的外设接口开启状态机状态转换图。如图4所示,该状态机的功能较为单一,但这也保证了外设接口选择不会因为其他意外情况而出现问题。当芯片上电或者复位后进入初始态,初始态中SDIO接口和SPI接口均打开,用于检测初始化序列;当检测到SDIO命令或者SPI初始化序列后,状态机跳转到对应状态(SPI启用态或者SDIO启用态),同时关闭不启用的外设接口,跳入SPI启用态或者SDIO启用态状态机便不会再跳转,只有复位后才能再次进入初始态。如果在初始态时检测到了错误信号,状态机跳入出错态,关闭SPI和SDIO接口,防止出现传输冲突。以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1