1. 首页
  2. 移动开发
  3. 其他
  4. 电子 I2C总线.pdf

电子 I2C总线.pdf

上传者: 2020-07-29 04:08:54上传 PDF文件 561.77KB 热度 25次
电子-I2C总线.pdf,单片机/嵌入式STM32-F0/F1/F2STM32F1资料https://yunpan.cn/crbudugdykamn2访问密码ca90Ⅲ、关于12C协议I2C协议的描述请网上搜索,下面将结合时序图+源代码程序一起讲解关于I2C协议中重要的儿点。1.开始和停止条件SCL时钟电平为高:SDA数据线由高-〉低为总线开始条件;SDA数据线由低一>高为总线结束条件;注意:开始之后将SCL变为低电平,防止误操作SDA使其通信停止,见源代码)时序图:下降沿上升沿SDASCLStartStop源代码程序:65函数名称:2 C start66功能数值者r2c开始67参669作4想 rongerhuang71 void I2C Start (void)72曰75工2 C SCL HIGH//5CL高7任王2 C Delay()75工2 C SDA HIGE/sD高77I2C Delay():工2CsDA王0WF/SDA低79I2C Delay():∥/SC低(待写地址/数据)82I2C Delay():3|1486函数名称:2c5p97功能:2c停止数:无9返回值:无90作者: rongerHuang91L一害前有有害实害肯害/12 voId I2C stop(void)93曰工2 C SDA ONBB低→高9512C DelayoF9石97工2 C SCL HEGH://5CL高工2 C Delay()99100工2 C SBA HEGH7/SDA高101工2cDe1ay()1022.数据位传输SCL时钟电平为低,可以改换SDA数据线的电平,在SCL上升沿的过程将SDA数据发送出去(切记:请先将SCL变为低电平,再改变SDA电平状态。主要用于I2C读写Byte函数,这两个函数网上很多人写的不规范,引用需注意,在下面我会举例说明)时序图:改变SDA数报电平SDA数据线定数据有效允许SCL为低改变发送一位“高”数据流程SCI.IDW时钟低-> SDA HIGH数据>SCL.HIGH时钟高3.应答位信息I2C是以宇节(8位)的方式进行传输,总线上每传输完1字节之后会有一个应答信号,主器件(主机)需要产生对应的一个额外时钟。应答位产生及接收:1.在(主机)写数据的时候是从机应答(给主机),主机检测;2.在(主机)读数据的时候是主机应答(给从机),从机检测(这里可以借助I2C读写函数一起理解)时序图(主机写,从机应答,主机读取应答)(主机)2/°SDA(主机)非应答SDA(从机)主机写,从机应答应答起始信号SP20.0130函数名称:工2 C BACK131功能:2C主机读取应答(或非应答)位132参数:无133返回值:工2cCK-答34工2CAcK---非应答135作者: etrongerHuang136L““和“有137 uints t I2C GetAck(void)138日139uint8 t ack14014I2C SCL LOWE//CL低->高1电2I2C Delay():143144工2 C SDA工GH//释放sDA(开漏模式有效)145I2C Delay():14617I2C SCL HIGH;//5cL高(读取应答位)148I2C Delay():1915if(I2C SDA READ151aek=工2 C NOACK/非应答152e工s色153ack F lZC ACK:应答154155工2cscL/scL低156工2cDe1ay()1571581592时序图(主机读,主机产生应答):(主机)/2/°SDA(从机)非应答SDA(主机)主机读(从机发送),主机应答应答起始信号Sicc105函数名称:工2 C StaCk106功能:工2c主机产生应答(或非应答位107:工2caCR108工2 NOACK-非应答109返回值:无110作者: strongerHuang112 void I2C FutAck(uints t Ack)113曰11±I2当cw//5c工低I2C Delay(F11石117if(I2C ACK = Ack11工2 SDA LC:/应答119else120工2 SDA HIGH//非应答121工2 Delay()F122123工2 C SCI HIGH//cL高+>低124I2C Delay():125工2 C SCL LOW//C低126工2 c Delay()74.I2C写一字节这里说的I2C写,是主机往从机接入1Byte的数据;“写”要求按照上面的“数据为传输”来操作:在SCL时钟为低电平时准备好待SCL为高电平时发送出去。写完一字节(8位)之后,读取从机的应答位若为0,表示从机应答,可以继续下一步操作若为1,表示从机非应答,不能进行下一步操作。注意I2C写一字节不是 EEPROM写一字节(需要区分开来)。“简洁版”没有对应答信号做出检测判断,需要检测应答信号,可参考“综合版写一字节时序(前面8位数据+最后1为应答)SCL(主机)SDA(主机)非应答SDA(从机)主机写,从机应答起始信号S源代码程序1c.c162函数名称:I2 c WriteByte163功能:12c写一字节64参数Da七盘数据16返回值:无166作音:9 crongerHuan167168 vold 12c writeByte (uintE t Data)16917intB t cnti171172 far[ent-o; ent
下载地址
用户评论