1 / 12
文档名称:

I2c总线协议合同书.doc

格式:doc   大小:38KB   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

I2c总线协议合同书.doc

上传人:wxc6688 2022/7/7 文件大小:38 KB

下载得到文件列表

I2c总线协议合同书.doc

相关文档

文档介绍

文档介绍:精心整理
精心整理
精心整理

???2条双向串行线,一条数据线SDA,一条时钟线SCL。
?? SDA传输数据是大端传输,每次传输8bit,即一字节。
?? 支持多主控(multimastering),任何DR与会话中Slaveaddr匹配,此bit被置1
MBB:0 I2C bus idle??
???? 1 I2C bus busy
MAL:若置1,表示仲裁失败
BCSTM:若置1,表示接收到广播信息
SRW:When MAAS is set, SRW indicates the value of the R/W command bit of the calling address, which is sent from the master.
?? 0 Slave receive, master writing to slave
?? 1 Slave transmit, master reading from slave
MIF:Module interrupt. The MIF bit is set when an interrupt is pending, causing a processor interrupt request(provided I2CCR[MIEN] is set)
RXAK:若置1,表示收到了ACK
精心整理
精心整理
精心整理
I2CDR 数据寄存器
?
这个寄存器储存CPU将要传输的数据。
3. PPC-Linux中I2C的实现
?
? 内核代码中,通过I2C总线存取寄存器的函数都在文件drivers/i2c/busses/i2c-
? 最重要的函数是mpc_xfer.
??
static?int?mpc_xfer(struct?i2c_adapter?*adap,?struct?i2c_msg?*msgs,?int?num)
{
????struct?i2c_msg?*pmsg;
????int?i;
????int?ret?=?0;
????unsigned?long?orig_jiffies?=?jiffies;
????struct?mpc_i2c?*i2c?=?i2c_get_adapdata(adap);
精心整理
精心整理
精心整理
????mpc_i2c_start(i2c);????// 设置I2CCR[MEN], 使能I2C module?
????/* Allow bus up to 1s to become not busy */
????//一直读I2CSR[MBB],等待I2C总线空闲下来
????while?(readb(i2c->base?+?MPC_I2C_SR)?&?CSR_MBB)?{
????????if?(signal_pending(current))?{
????????????pr_debug("I2C: Interrupted\n");
????????????writeccr(i2c,?0);
????????????return?-EINTR;
????????}
????????if?(time_after(jiffies,?orig_jiffies?+?HZ))?{
????????????pr_debug("I2C: timeout\n");
????????????if?(readb(i2c->base?+?MPC_I2C_SR)?==
????????????????(CSR_MCF?|?CSR_MBB?|?CSR_RXAK))
????????????????mpc_i2c_fixup(i2c);
????????????return?-EIO;
????????}
????????schedule();
????}
????for?(i?=?0;?ret?>=?0?&&?i?<?num;?i++)?{
????????pmsg?=?&msgs[i];
????????pr_debug("Doing %s %d bytes to 0x%02x - %d of %d messages\n",
?????????????pmsg->flags?&?I2C_M_RD???"read"?:?"write",
?????????????pmsg->len,?pmsg->addr,?i?+?1,?num);
精心整理
精心整理
精心整理
????????//根据消息里的flag进行读操作或写操作
????????if?(pmsg->flags?