打印
[学习笔记]

AC7801的简易I2C通信

[复制链接]
4730|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 RunningX 于 2021-6-4 18:01 编辑

在AC7801的I2C驱动库中,已经把I2C的大部分中断处理都做了。包括一些数据接收的处理,都已经在库函数里面给实现了。
对于一些用户的使用,可能要求使用更加灵活,数据处理全部由用户进行处理,而不是通过库函数来实现。
这里做了一个最常用的使用方式,发送是主动的polling方式,而接收则是用中断来实现(更改了I2C库文件里面的宏定义,中断处理由用户自己操作)。
工程如下:
7801简易I2C通信.rar (3.75 MB)
该工程中主机跟从机的通信协议如下:
1、主机发送地址0x30(方向写)和命令0xAA      
2、主机发送地址0x30(方向读)   
3、从机从步骤1主机写中读到命令0xAA,然后在步骤2中识别到主机读的指令,回复两个数据
4、主机读到两个数据,发送stop位,停止通信
5、代码在主循环中每隔1s重复一次步骤1~4

需要注意的几个点:
1、地址为高7位,最低位为方向位
2、主机发送start位跟stop位,需要先检测是否处于ready状态
3、TACK设置,是为下一个接收到的数据的回复。比如当前把TACK设置为1,则下一个数据收到后,回复NACK
4、从机接受到地址后,不会产生BND中断,但会产生从机地址匹配中断。所以从机接到主机读的指令后,第一个数据发送是在地址匹配中断里面发的
5、I2C中ACK的波形为低电平,NACK为高电平
6、由于数据发送方会在第9个SCK释放SDA线(释放后为高电平),假如应答位是ACK(低电平),那么可能会看到ACK波形前面会有一个很小的高电平脉冲。这个脉冲时间也就是SDA线被释放到ACK应答之间的间隔,不影响数据识别。
7、当主机传输方向为RX时,读数据寄存器会自动发下一个时钟;所以读最后一个字节数据的时候,读数据寄存器前,需要把传输方向改为TX,避免多发一个时钟


请以上面的代码为准,下面的那个代码是错的(发的附件好像不能删改,而且会自动附上,这个功能建议21ic论坛人员看到的话,可以改一下功能,有点麻烦)




7801简易I2C通信.rar

3.74 MB

使用特权

评论回复

相关帖子

沙发
weifeng90| | 2021-6-3 21:09 | 只看该作者
看下代码学习一下。

使用特权

评论回复
板凳
yangxiaor520| | 2021-6-4 07:43 | 只看该作者
讲解详细,感谢楼主的分享。

使用特权

评论回复
地板
huquanz711| | 2021-6-8 18:33 | 只看该作者
那个图片是逻辑分析仪的上位机?

使用特权

评论回复
5
RunningX|  楼主 | 2021-6-9 09:20 | 只看该作者
huquanz711 发表于 2021-6-8 18:33
那个图片是逻辑分析仪的上位机?

使用特权

评论回复
6
自己造声卡| | 2021-6-9 12:16 | 只看该作者
这个是用逻辑分析仪看的吧。。。。

使用特权

评论回复
7
foxsbig| | 2021-6-10 15:48 | 只看该作者
i2c我都是用IO模拟的,跟你比起来有点低端了。

使用特权

评论回复
8
两只袜子| | 2021-6-13 18:03 | 只看该作者
帮顶一下

使用特权

评论回复
9
HuangHongLun| | 2021-6-15 09:07 | 只看该作者
附件应该是可以直接删除的。然后你重新上传就好了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

223

帖子

4

粉丝