I2C原理学习总结

内部集成总线  简单高效

1.在SCL为高电平期间,SDA由高到低跳变,表示传输开始。

函数实现:
void Start(void)                /*START 启动I2C 总线子程序发送I2C 起始条件*/
{
        SDA = 1;                                 /* 发送起始条件的数据信号*/
        _nop_(); 
        SCL = 1;                                 /*发送起始条件的时钟信号*/
        _nop_();         /*起始条件建立时间大于4.7 s*/
        SDA = 0;                                 /*发送起始信号*/
        _nop_();         /*起始条件锁定时间大于4 s*/
        SCL = 0;                                 /*钳住I2C 总线准备发送或接收数据*/
}

2.传输的第一个字节为地址,以选择不同的从设备。



3.之后以字节为单位传送数据,SCL为高电平期间采样,在此过程中,SDA上的电平不能有变化(否则会被看成是起始或者结束信号)。

在SCL为低电平期间,数据位才允许发生变化。


4.每字节数据传输完成后,发送方要释放SDA, 接收方要在第九个时钟期间发送一个ACK。

/*-----------发送应答位--------------------------------------------------*/
void SendACK()
{
        SCL = 0; 
        _nop_(); 
        SDA = 0; 
        _nop_(); 
        SCL = 1; 
        _nop_(); 
        SCL = 0; 
}

/*------------发送非应答位-----------------------------------------------*/
void SendNoACK()
{
        SCL = 0; 
        _nop_(); 
        SDA = 1; 
        _nop_(); 
        SCL = 1; 
        _nop_(); 
        SCL = 0; 
}

5.在SCL为高电平期间,SDA由低到高跳变,表示传输结束。


实现代码:

void Stop(void)
{
        SDA = 0; 
        _nop_(); 
        SCL = 1; 
        _nop_(); 
        SDA = 1; 
        _nop_(); 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值