该状态机融合了主模式和从模式两种模式,该状态机在系统时钟控制下,在 detect_falling_edge有效(指示SCL的下降沿)时完成状态转换.SCL时钟可以是由任何 master产生。在每个状态,系统检查系统处于何种模式以决定正确的系统输出和进入下一 个状态的条件。这样就可以实现当主模式失去总线控制权后快速转成从模式或者该接口可 以被其他master寻址。 系统上电复位后,状态机进入到IDLE状态。当系统检测到总线上出现启始状态即 detect_start有效时,系统进入HEADER状态。 在HEADER状态,状态机传送寻址字节。从模式串行接收总线上传来的slave_address, 而主模式,则一面串行输出slave_address,一方面同时接收总线上传送的 slave_address。这样,可以保证当主模式失去总线控制权转入从模式时,系统可以被其它 master寻址。slave_address传送结束,状态机进入ACK_HEADER状态。 在ACK_HEADER状态:从模式,如果系统被寻址,则系统响应master并根据读写控制 位进入到RCV_DATA或者XMIT_DATA状态,否则系统不响应并返回IDLE状态。主模式,则 根据读写控制位直接进入RCV_DATA或者XMIT_DATA状态,如果slave不响应,就需要SCL 状态机在下一个状态产生停止信号。 在RCV_DATA和XMIT_DATA状态,移位寄存器串行接收或者发送数据,如果检测到启始 信号则状态机进入HEADER状态:如果检测到停止信号,状态机会被强制进入IDLE状态, 这时是不能在detect_falling_edge有效完成状态转化的,因为停止信号后是不会出现SCL 的下降沿的,除非再次出现起始信号,这就需要提升对停止信号响应的优先权,一旦发现 停止信号,状态机就会在系统时钟的上升沿进入到IDLE状态,从而完成状态转换:如果主 模式失去了总线控制权,状态机使SDA输出高阻,释放总线的控制权。当接收或者发送完 毕,状态机分别进入ACK_DATA或者WAIT_ACK状态。 在ACK_DATA状态,在主模式下系统如果希望从slave处继续接收数据,就需要响应 slave,否则不响应,说明这是master接收的最后一个字节。从模式,一般情况下都响应 master的。状态机回到RCV_DATA状态。 在WAIT_ACK状态,在从模式下系统发现master没有响应,状态机需进入到IDLE状态 释放总线,以使master产生停止信号或者重复启始信号;否则,状态机回到XMIT_DATA状 态。在主模式下,如果系统发现slave响应,则状态机进入XMIT DATA状态:否则,状态 机返回IDLE状态,同时需要SCL状态机在XMIT_DATA状态时产生停止信号终止数据传送。 4.2.3各子模块 4.2.3.1仲裁过程子模块 该模块检查系统在主模式下是否总线竞争失败。在IDLE、HEADER和XMI_DATA和 ACK_DATA状态且SCL时钟为高电平时,主模式下的该系统检查SDA总线上的数据和系统内 部的SDA输出是否一致,如果不同则说明系统总线竞争是否失败,arb_lost置为有效,同 6 uvwR>U [ uvwFstB>WXF ÕzüzèüïyõïzÕz ÄÊdP f ëñeB®ÙuvØðL f B>)5^ü Oyüz{ ïî%FtuvstçSst]Ðü 5,æst[M uv ¤% )5RU ¬´WX?øØÙ k) 5 Oyüz{ §¨% stI?uvwM efH uv%RstçI;7uvY Õzüzèüïüy{ü ÄÊBstM dHeH% uv% F dHeH% uvuvw¬w§¨·´% 8xI¬) y|zïyÕÕ{z ÅU Q » 8 y|zïyÕÕ{z 3 » © B x I¬ w y|zïyÕÕ{z % )5àRU ¬´WXØM Bst)5 Oyüz{ §¨% y|zïyÕÕ{z ¬wpuvwM êïdHeH% uv% F êïdHeH% uvò ÚÛst§¨Qst¸ Oyüz{ Dá«XYWX M % cïeI k ÀPIïeI uv Qst¸DÅ efH uv%U Q á«XYWXÓM % cïeI k ÀPIïeI uvOÚÛ y|z ¸,- f uvwFuvïî¡¢% F % cïeI [ ÀPIïeI uvÏá 8xkãw«OÚÛç;7 ¡¢QuvwM dHeH% uv5ÚÛç¡¢uvw[XM efH uv BÒF ÕzüzèüïyõïzÕz ÄÊ®ÙuvØÕ9¡¢? f ëñÏÛܦ7¡¢ ,-Ù¡¢¸T¤ûã ¡¢uvwFstB>IÙñM efH uvÅ®ÙuvØð5ÚÛU ¬´WXuvw' e ÷n¡AWX% Rxkãw® DuvwåM êïeI k JIï ê uv% F êïeI uvFU stÚÛUV y|z ]µ¶x«,-¸ y|z Q¸íå Oyüz{ x?·´% Wu¸ Oyüz{ %uvw % cïeI uv% F JIï ê uvF stã Oyüz{ Óĸuvw,M efH uv ¡A5' Oyüz{ ïî¡¢k:;7¡¢5 Quvw ÀPIïeI u v%FU ÚÛstã y|z ¸QuvwM ÀPIïeI uv5 Quv wÅ efH uv©B,- f uvwF ÀPIïeI uvBïî¡¢¾«¬w% %::" LD9E nLkLoLg 7y z zçSstFU °±¬³%F efH < dHeH% [ ÀPïeI [ êïeI uvE f B>9÷-BU stçS e I«[stÎ ä e ¨ÚÛ©Qíåst°± ¬³ y{ûïü $9ÄÊ©