2 Star 3 Fork 2

Schips / gd32_software_i2c_slave

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

software-i2c_slave in GD32

在GD32F450上实现GPIO-I2C-SLAVE,要求2个支持双边沿中断的GPIO。

测试平台 CPU主频 I2C速率 状态
GD32F450 200M 100K OK
GD32F150 72M 10K OK

特性

允许多例

核心接口和板级代码已经做分离,一个单片机可以支持n个I2C从设备。

具体见i2c_slave_0.c的有关实现,以快速拓展n个从设备处理。

友好的寄存器空间管理

提供接口支持主机写入寄存器时,对值进行检查,具体见i2c0_reg_will_changed的实现。

提供接口支持从机主动更新寄存器(参考i2c0_reg_update_poll的实现和调用方式)

自定义设备地址

修改i2c_slave_0.h中的SW_SLAVE_ADDR_7BIT即可。

支持连续读写

支持连续写、连续读;在Linux平台验证i2c访问从机结果如下:

# i2ctransfer -f -y 0 w4@0x51 0x00 0xa1 0xa2 0xa3
# i2ctransfer -f -y 0 w1@0x51 0x00 r1
0xa1
# i2ctransfer -f -y 0 w1@0x51 0x00 r3
0xa1 0xa2 0xa3
# i2ctransfer -f -y 0 w1@0x51 0x01 r2
0xa2 0xa3

注意事项

1、目前demo中,SDA、SCL都使用同一个ISR,请在你的实际项目中,在对应的ISR响应SDASCL

2、在移植时,请修改i2c_slave.c中所有带CHECK_PORTING的函数接口。

3、可以在systick中添加i2c_tick_inc来做异常处理。实测,可以不调用i2c_sw_check_timeout;如果需要调用,需要确保i2c_sw_check_timeout的执行间隔大于10ms。

4、通讯速率建议不超过100K左右;不支持SCL展频(Spread Spectrum Clocking)。

常见问题

少量读写正常,而多次访问却有问题

参考的解决方法:

  1. 尝试降低I2C主机的速率
  2. 主动降低I2C主机读写的间隔,确保在完整的I2C通信结束以后再发起下次通信
  3. 调整从机端的编译优化选项,以从编译层面优化代码效率

空文件

简介

基于GPIO,在GD32上实现I2C 从设备 展开 收起
C 等 2 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C
1
https://gitee.com/schips/gd32_software_i2c_slave.git
git@gitee.com:schips/gd32_software_i2c_slave.git
schips
gd32_software_i2c_slave
gd32_software_i2c_slave
master

搜索帮助