http://hengch.blog.163.com/blog/static/10780067201123024415855/
在以前的博文中,提到过CS5536这颗芯片,该芯片的datasheet在下列地址可以下载到:
这篇博文本来不是一篇公开的文章,仅用于自己需要时查阅,不过也许有些人会需要,所以现在予以公开,其中的大部分内容来源于该芯片的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
所有状态寄存器的值,通过读或者写入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
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
该位清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工作在从设备状态时,主设备会启动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
该寄存器确定是否使用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
其中,
t
CLK为模块的输入时钟周期。
SCLFRQ允许的取值范围为0008h--7fffh,置入其他值可能会有不可预见的结果。
7、SMB Control 3 (SMB_CTRL3)
偏移:06h 类型:R/W 缺省:00h