MN316 OpenCPU丨I2C使用介绍

I2C总线作为常用的通信接口,是一种简单、双向二线制同步串行总线只需要两根线即可在连接于总线上的器件之间传送信息,属于半双工模式。MN316 OpenCPU支持1路I2C功能,可实现与外部I2C器件如EEPROM、温湿度传感器等通信。本文从使用流程接口解析demo代码解析及注意事项四个方面介绍I2C使用方法

  • I2C使用流程解析

1为使用MN316 OpenCPU I2C功能时的常见流程及相关函数接口介绍。

图 1 I2C功能使用流程图

  • I2C功能接口

I2C功能主要包含以下接口,可在cm_i2c.h中查看

1、I2C模块初始化

图 2 I2C串口初始化接口

使用I2C功能前需要初始化I2C模块。

(1)dev 通路编号,目前仅支持通路1:CM_I2C_DEV_1

(2)cfg 配置,结构成员包括:

addr_type,设备地址类型,7位寻址和10位寻址,I2C总线规范规定,从机地址为7位长,其次是读/写位。其中0表示写,1表示读,如图3。

图3 从机设备地址

关于设备地址的确认需要参考实际测试的I2C器件datasheet,后文以某EEPROM进行举例说明。

mode,主从模式,目前仅支持主模式;

clk,通信速率,目前仅支持CM_I2C_CLK_100KHZ;CM_I2C_CLK_400KHZ两种速率。需要提前确认I2C器件是否支持以上两种速率。

2、I2C模块去初始化

图4 I2C串口去初始化接口

调用此接口可关闭I2C通道

3、I2C写接口

图 5 I2C写接口

(1)dev,通路编号,目前仅支持通路1:CM_I2C_DEV_1

(2)slave_addr,从机设备地址,外部传感器的设备地址。

以7位寻址举例:如某EEPROM器件datasheet中描述设备地址给出为8位地址1010 000第7位表示读写位,写地址则为10100000。

图6 从机设备地址

若采用7位寻址,则只需提取该地址的前7位,则为01010000,为0X50。设备地址需要根据外设的datasheet进行确认。

(3)data,待写入的数据,若外设还具有寄存器地址,则需要把寄存器地址当做数据一起传入

(4)len,待写数据长度,单次最大只支持写入8个字节

(5)返回值,实际写入长度,可通过此接口判断是否写入成功。

4、I2C读接口

图 7 I2C读接口

(1)dev,通路编号,目前仅支持通路1:CM_I2C_DEV_1

(2)slave_addr,从机设备地址,也就是外部传感器的设备地址。

(3)data,存放读取数据的缓存buffer,若需要读取外设某寄存器地址上的数据,则需要先使用写接口写入相应的寄存器地址,再进行读取

(4)len,待写数据长度,单次最大只支持写入8个字节

(5)返回值,实际写入长度,可通过此接口判断是否写入成功。

  • Demo使用方法

在源SDK demo以EEPROM(型号is24c256)为例,写明了一个测试函数。使用测试命令CM:I2C即可测试,实现的是写入并读出1个字节。

1、编译demo测试固件

图 8 I2C demon测试接口

(1)若要使用demo中的测试功能,需使用编译命令build.bat dbrs_h0 demo其中dbrs需要根据模组型号相应编译

(2)测试命令:CM:I2C

2、测试程序逻辑

(1)该测试程序逻辑主要是向外设EEPROM,型号为is24c256,写入一个字节’A’,再进行读取

图 9 编写外设EEPROM is24c256读写测试接口

(2)可以看到在初始化I2C完成后,向I2C写数据,需要先传入寄存器地址,然后再加上数据,然后一并传入cm_i2c_write写接口,完成写入操作

图 10 MN316原生接口向外设EEPROM写数据注意事项

(3)可以看到在读取操作时,需要先写入需要读的地址,然后再进行读取。

图 11 MN316原生接口向外设EEPROM读数据事项

3、I2C读写示例

笔者使用EEPROM BL24C256A 256KB为例,设备7位地址为0X50,示例:

图 12 外设EEPROM BL24C256A 初始化

图 13 向外设EEPROM BL24C256A 写数据程序

图 14 外设EEPROM BL24C256A 读数据程序

写好读写接口后,只需要在主函数进行调用即可,1、初始化;2、写数据、3、读数据。

图 15 外设EEPROM BL24C256A 读写test数据程序

测试结果如下图:

图 16 外设EEPROM BL24C256A 读写测试验证

可以看到data[]默认数据为0XFF,通过EEPROM写读后,变为test,说明模组与EEPROM可以通过I2C正常通信。

  • 注意事项

1、为什么I2C通信不成功?

(1)检查cm_i2c_open初始化是否成功,注意配置的通信速率100KHZ或400KHZ是否在外设支持的通信范围内

(2)外设地址是否确认无误,常见采用7位寻址,需要根据外设的数据手册,区分给出的是7位还是8位地址若是8位地址则需要保留取前7位地址即可

(3)检查cm_i2c_read/write读写接口,是否实际返回读写成功字节数,若返回错误,检查设备的外设的寄存器地址是否传入有误,数据长度是否一致。

2、I2C如何读取外设某寄存器中的数据?

目前提供的读cm_i2c_read接口,需把寄存器地址通过写接口写入后,再进行读取。

### 回答1: mn316是一个硬件设计手册,其中提供了关于硬件设计的详细信息和指导。该手册涵盖了各种硬件设计的方面,包括电路设计、元器件选择、布局设计等。 首先,mn316硬件设计手册介绍了电路设计的基本原理和方法。它详细解释了各种电路元件的特性和功能,并提供了电路设计的步骤和技巧。通过学习这些内容,设计人员可以更好地理解电路设计的基本概念并能够应用到实际的项目中。 其次,mn316硬件设计手册还介绍了如何选择合适的元器件。它列出了一些常见的元器件类型,例如电阻、电容、晶振等,并解释了如何根据设计需求选择合适的元器件。这对于确保电路的稳定性和可靠性非常重要。 此外,mn316硬件设计手册还涵盖了布局设计的相关内容。布局设计对于电路的性能和噪声抑制有着重要的影响。手册中提供了一些建议和指导,如如何正确放置和布线电路元件,如何处理接地和电源线等。 总的来说,mn316硬件设计手册是一个非常有用的指南,对于硬件设计人员来说是一本宝贵的参考资料。它提供了全面的硬件设计知识,并通过实际案例和示例帮助设计人员更好地理解和应用这些知识。无论是初学者还是有经验的设计工程师,都可以从中获得很大的帮助。 ### 回答2: mn316是一款硬件设备,其硬件设计手册是指为了帮助开发者正确使用和集成该设备而提供的详细说明文档。这个手册通常会包括以下内容: 1. 设备概述:对mn316硬件设备的基本特性、功能和用途进行介绍,以便开发者理解设备的基本结构和工作原理。 2. 硬件规格:涵盖了mn316硬件设备的各种规格参数,如尺寸、重量、电源要求、接口类型等。这些规格对于设计环境和集成设备时都是十分重要的参考信息。 3. 引脚定义:对mn316硬件设备的各个引脚进行详细的定义和描述,包括引脚的功能、输入输出类型、电气特性等。这有助于开发者正确连接和配置设备。 4. 电路原理图:mn316硬件设备的电路原理图将在这个手册中提供。该电路原理图有助于开发者理解设备内部的电路连接和工作方式,用于设计定制化的电路板时会非常有帮助。 5. 设计指导:这部分通常会提供关于如何进行mn316硬件设备的集成和设计的实用建议和指导。例如,关于电源供应、信号传输、地线和噪声处理等方面的建议,以确保设备的正常运行和最佳性能。 总的来说,mn316硬件设计手册是一个重要的技术文档,为开发者提供了关于这款设备的各种详细信息和设计指导,帮助他们更好地了解和应用mn316硬件设备。 ### 回答3: mn316_硬件设计手册是一本详细介绍mn316硬件设计相关内容的手册。mn316是一种硬件设备,本手册通过详细介绍mn316的硬件设计原理、电路图、技术规格等内容,帮助读者了解和掌握mn316硬件设计的相关知识。 首先,mn316_硬件设计手册会介绍mn316硬件设计的基本原理。这包括mn316的工作原理、电路结构、功能模块等方面的内容。通过了解这些基本原理,读者可以更加全面地了解mn316设备的硬件设计思路,有助于设计出更加稳定和高效的硬件设备。 其次,mn316_硬件设计手册还会提供mn316的详细电路图,并进行解析。这些电路图包括mn316的主要电路、无线通信模块、传感器接口等,能够帮助读者理解mn316硬件设计的具体实现方式和电路连接方式。 此外,mn316_硬件设计手册还会对mn316的技术规格进行详细说明。例如,mn316的输入输出电压范围、通信协议、功耗等技术参数,以及相应的设计注意事项。这些内容对于工程师在进行mn316硬件设计时非常重要,可以帮助他们根据实际需求进行相应调整和设计。 总之,mn316_硬件设计手册是一本重要的参考资料,对于想要了解和掌握mn316硬件设计相关知识的人非常有价值。通过阅读本手册,读者可以详细了解mn316硬件设计的原理、电路图和技术规格,提高硬件设计的水平和能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值