CS5536中SMB寄存器的说明

来源:互联网 发布:淘宝义卖四百字作文 编辑:程序博客网 时间:2024/04/28 15:35

http://hengch.blog.163.com/blog/static/10780067201123024415855/

 

  在以前的博文中,提到过CS5536这颗芯片,该芯片的datasheet在下列地址可以下载到:
    http://blog.hengch.com/datasheet/cs5536.pdf
    这篇博文本来不是一篇公开的文章,仅用于自己需要时查阅,不过也许有些人会需要,所以现在予以公开,其中的大部分内容来源于该芯片的datasheet。
    SMB(System Management Bus)实际上就是常说的I2C总线,CS5536中有一组寄存器专门用于控制I2C总线。
1、SMB Serial Data (SMB_SDA)
   偏移:00h  类型:R/W   缺省:00
   这个移位寄存器用于发送和接收数据,先发送(接收)的数据放在高位(MSB),后发送(接收)的字节放在低位(LSB),只有当SDAST=1(SMB I/O 01h[6])时才可以读写该字节,或者在设置完START位后重复start时可以读写该字节,其他任何情况下读写该字节都可能发生不可预知的后果。
2、SMB Status (SMB_STS)
   偏移:01h  类型:R/W   缺省:00h
CS5536中SMB寄存器的说明 - whowin - DOS编程技术
   所有状态寄存器的值,通过读或者写入1都会被清0,写入0无效。
 bit7  SLVSTP(Slave Stop)
   CS5536作为从设备传输时,在MATCH(SMB I/O 02h[2])或者GCMATCH(SMB I/O 02h[3])为1的情况下,一旦检测到STOP,则该位置1。
   清除该位需要读该位或者向该位写入1,向该位写入0将不会有任何作用。
 bit6  SDAST(SMB_DATA Status)(只读)
   1--在发送数据时(不论主、从设备),为1表示等待数据发送,可以向SMBSDA写入数据发送
      在接收数据时(不论主、从设备),为1表示SMBSDA中已经锁定一个字节的数据,可以读取
   0--发送数据时,向SMBSDA中写入数据可以使该位清0
      接收数据时,读取SMBSDA中的数据可以使该位清0
 bit5  BER(Bus Error)
   清除该位需要读该位或者向该位写入1,向该位写入0将不会有任何作用。
   在数据传输过程中检测到一个START或者STOP条件,或者检测到一个总线仲裁问题等,此位会被置1。
 bit4  NEGACK(Neg Acknowledge)
   清除该位需要读该位或者向该位写入1,向该位写入0将不会有任何作用。
   在第9个时钟周期没有收到ACK信号时,该位会被置1,此时SDAST也不会被置1。
 bit3  STASTR(Stall After Start)
   清除该位需要读该位或者向该位写入1,向该位写入0将不会有任何作用。
   当该位置1时,控制器会通过将SMB_CLK拉低来占用总线。
   在作为从设备使用时,该位永远也不会置1。
   当该位置1时,表明地址信息已经成功地发送,总线已经被占用。
   备注:要使该位能够正常置位,STASTRE必须置1;另外,如果INTEN=1时,当该位置位时会产生一个中断。
 bit2  NMATCH(New Match)
   清除该位需要读该位或者向该位写入1,向该位写入0将不会有任何作用。
 bit1  MASTER(Master)(只读)
   主设备状态位。为1时表示工作在主设备状态。
 bit0  XMIT(Transmit)(只读)
   数据方向位。为1时表示发送数据(不论主、从)。

3、SMB Control Status (SMB_CTRL_STS)
   偏移:02h  类型:R/W   缺省:10h
CS5536中SMB寄存器的说明 - whowin - DOS编程技术
 bit7:6  备用。读出为0,写入无作用
 bit5    TGSCL(Toggle SMB_CLK Line)
   该位用于在进行错误回复时出发一下SMB_CLK。
   在SMB_DATA线为低电平时,向该位中写入1会使SMB_CLK切换一个时钟周期;在SMB_DATA线为高电平时,向该位写入1无效。
 bit4    TSDA(Test SMB_DATA Line)(只读)
   这一位会读取SMB_DATA线上的值。可以用于错误恢复,有时SMB_DATA会被一个不同步的从设备不断地拉低,从类似这样的错误中恢复过来可能会需要读取这一位。向该位写数据无效。
 bit3    GCMTCH(Global Call Match)(只读)
   在从设备工作模式下,当GCMEN=1时,如果在START条件后的地址为00h,则该位置1。
 bit2    MATCH(Address Match)(只读)
   当SAEN=1,且在START条件后发送到总线上的地址与SMBADDR相符时,此位为1。
 bit1    BB(Bus Busy)
   清除该位需要读该位或者向该位写入1,向该位写入0将不会有任何作用。
   总线被占用(SMB_DATA或者SMB_CLK处于低电平),或者符合START条件。
 bit0    BUSY(Busy)(只读)
   为0时表示SMB被禁用或者SMB处于空闲状态。
   为1时,可能有下列情况:
  • 正在产生一个START条件
  • 检测到一个START条件
  • 当MASTER=1时,工作在主设备模式
  • 当MATCH=1时,工作在从设备模式
4、SMB Control 1 (SMB_CTRL1)
   偏移:03h  类型:R/W   缺省:00h
CS5536中SMB寄存器的说明 - whowin - DOS编程技术
 bit7  STASTRE(Stall After Start Enable)
   该位清0,则STASTR不会被置位;另外,当STASTR=1时,将STASTRE清0,STASTR不会同时被清0。
   该位置1,在START机制后将占有总线。设备将在发送完地址字节后占用总线。
 bit6  NMINTE(New Match Interrupt Enable)
   将该位置1,同时,INTEN=1的情况下,如果发现一个相符的地址,将产生中断。
 bit5  GCMEN(Global Call Match Enable)
   当设备地址字节为0时,成为广播呼叫(Global Call)地址,该位确定是否相应广播呼叫。
   0--不响应广播呼叫地址
   1--相应广播呼叫地址
 bit4  ACK(Receive Acknowledge)
   在发送模式下,该位无效。
   在接收模式下,这一位将锁定在下一个ACK周期发出的指令。
   ACK周期后将被清0。
   如果要在下一个ACK周期发送否定确认(NEGACK),应将该位置1。
 bit3  RSVD(备用)
 bit2  INTEN(Interrupt Enable)
   置0将禁止SMB产生中断
   置1,SMB将在下列事件发生时产生中断:
  • 检测到一个相符的地址(NMATCH=1),且NMINTE=1
  • 收到一个总线错误(BER=1)
  • 在发送了一个字节后,收到一个否定确认(NEGACK=1)
  • 在禁止DMA时,每次事务后收到的ACK信号(等同于硬件将SDAST置位)
  • 主设备模式,当STASTRE=1时,在成功发布START条件后(STASTR=1)
  • 在从设备模式下,收到一个STOP条件(SLVSTP=1)
 bit1  STOP(Stop)
   STOP条件发出后会自动清0。
   工作在主设备模式下时,将该位置1将发出一个STOP条件,用于结束传输或者终止传输
 bit0  START(Start)
   只有在主设备模式下或者申请成为主设备模式时才可以设置该位。
   当发送完毕START条件或者检测出总线错误时,该位会被清0。
   此位置1会产生一个单独的START条件,或者一个重复START条件。
   如果设备没有工作在主设备状态(MASTER=0),当BB=0的情况下将该位置1会产生一个START条件。
   如果设备已经工作在主设备状态(MASTER=1),设置该位并向SMBSDA中写入数据也会产生一个START条件,如果传输正在进行,会产生一个重复START条件,这种方式可以用于改变传输方向(主、从切换或者读、写切换),也可以用于切换不同的设备。
5、SMB Address (SMB_ADDR)
   偏移:04h  类型:R/W   缺省:00h
CS5536中SMB寄存器的说明 - whowin - DOS编程技术
   CS5536不仅可以工作在主设备状态,也可以工作在从设备状态,该字节中的地址是当CS5536工作在从设备状态时用于比较总线地址时使用的,不同于工作在主设备状态时发送的地址信息。
   当CS5536工作在从设备状态时,主设备会启动START条件,然后向总线发送地址信息,如果将SAEN置1,则SMB会比较这个地址信息是否与bit0:6中的地址相符,如果相符,会产生一个MATCH条件。
 bit7    SAEN(Slave Enable)
 bit6:0  SMBADDR(Device address)

6、SMB Control 2 (SMB_CTRL2)
   偏移:05h  类型:R/W   缺省:00h
CS5536中SMB寄存器的说明 - whowin - DOS编程技术
   该寄存器确定是否使用SMB,另外确定SMB的始终速率。
 bit0    EN(Enable)
   0--禁用SMB
   1--使用SMB
 bit7:1  SCLFRQ[6:0](SMB_CLK Frequency)
   SCLFRQ一共由15位组成,该寄存器存低7位,高8位存在寄存器SMB_CTRL3中,SCLFRQ决定着SMB_CLK上的时钟周期(高电平和低电平的时长),依照下列公式计算:
     tSCLl =tSCLh = 2 * SCLFRQ *tCLK
   其中,tCLK为模块的输入时钟周期。
  SCLFRQ允许的取值范围为0008h--7fffh,置入其他值可能会有不可预见的结果。
7、SMB Control 3 (SMB_CTRL3)
   偏移:06h  类型:R/W   缺省:00h
CS5536中SMB寄存器的说明 - whowin - DOS编程技术
   见SMB_CTRL2的说明。