4. 用户态 I2C 编程
I2C 总线的设备文件通常为/dev/i2c-n( n=0、 1、 2...),每个设备文件对应一组 I2C 总
线。应用程序通过这些设备文件可以操作 I2C 总线上的任何从机器件。 EasyARM-i.MX283A
提供了一路 I2C 接口,设备文件为/dev/i2c-0。
root@EasyARM-iMX283 /# ls /dev/i2c*
/dev/i2c-0 /dev/i2c-1
4.1 I2C 编程接口
1. 打开设备
在操作 I2C 总线时,先调用 open()函数打开 I2C 设备获得文件描述符,代码如程序清单4.1 所示。
程序清单 4.1 打开 I2C 设备文件
int fd;
fd = open("/dev/i2c-0", O_RDWR);
if (fd < 0) {
perror("open i2c-1 \n");
}
2. 关闭设备
当操作完成后,调用 close()函数关闭设备:
close(fd);
3. 配置设备
当应用程序操作 I2C 总线上的从机器件时,必须先调用 ioctl()函数设置从机地址和从机地址的长度。
3.1 设置从机地址
设置从机地址是使用 I2C_SLAVE 命令,其定义为:
#define I2C_SLAVE 0x0703
该命令的参数为从机地址右移一位。设置从机地址为 0xA0 的示例代码为:
if (ioctl(fd, I2C_SLAVE, 0xA0 >> 1) < 0) {
perror("set slave address failed \n");
}
注意:地址需要右移一位,是因为地址的 Bit0 是读写控制位,在驱动中会将从机地址
命令参数左移一位,并补上读写控制位。
3.2 设置地址长度
设置从机地址的长度是使用 I2C_TENBIT 命令,其定义为:
#define I2C_TENBIT 0x0704
该命令的参数可选择为: 1 表示设置从机地址长度为 10 位; 0 表示设置从机地址长度为8 位。
设置从机地址长度为 10 位的示例代码为:
ioctl(fd, I2C_TENBIT, 1);
该命令是不会返回错误的。
如果不设置地址长度,则默认为 8 位地址。
4. 发送数据
应用程序调用 write()函数可以向 I2C 总线发送数据。例如在 I2C 总线发送“ hello”字符
串的代码如程序清单 4.2所示。
程序清单 4.2 在 I2C 总线发送数据
int len;
char buf[] = "hello";
len = write(fd, buf, sizeof(buf));
if (len < 0) {
printf("send data failed");
exit(-1);
}
write()函数调用成功后,返回成功发送数据的长度。在 write()函数调用时,数据发送过
程如下:
(1) 主机在 I2C 总线发送始起信号( S),然后发送从机地址( slave addr) ;
(2) 从机成功接收到属于自己的从机地址后,返回应答信号( ACK);
(3) 主机接收到应答信号后,把 buf 缓冲区中的数据逐个在 I2C 总线发送;
(4) 从机每成功接收到一个从主机发来的数据都返回应答信号;
(5) 当主机的数据发送完毕后,在 I2C 上发送结束信号( P)。
5. 接收数据
应用程序调用 read()函数可以在 I2C 总线接收数据。例如在 I2C 总线接收 10 个字节的代
码如程序清单 4.3 所示。
程序清单 4.3 在 I2C 总线读取数据
char buf[10];
int len;
len = read(fd, buf, 10);
if (len < 0){
printf("read i2c data failed");
exit(-1);
}
read()调用成功后,返回接收数据的长度。
read()函数调用时,数据接收过程如下:
(1) 主机在 I2C 总线发送始起信号( S),然后发送从机地址( slave addr) ;
(2) 从机成功接收到属于自己的从机地址后,返回应答信号( ACK);
(3) 主机接收到应答信号后,准备接收从机发来的数据;
(4) 从机把数据逐个向主机发送;
(5) 主机每成功接收到一个在从机发来的数据都返回应答信号;
(6) 当主机接收到最后一个数据时并不返回应答信号,而是在 I2C 总线上发送结束信号( P)。
4.2 编程范例
AP-283Demo 板上的 FM24C02A 是 I2C 接口的 EEPROM 芯片。 FM24C02A 是 2Kb( 256
字节)大小的 EEPROM,分为 32 个页,每页 8 字节。
这里通过演示读/写 I2C 接口的 EEPROM 来进一步说明应用程序如何使用 I2C 编程接口。
1. FM24C02A 的操作
1.1 从机寻址
当接收到起始信号后, FM24C02A 需要一个 8 位的从机地址来启动一次读/写操作,其
从机地址构成:
1010 A2 A1 A0 R/W
从机地址前 4 位的值固定不变,第 2、 3、 4 位的值分别由 FM24C02A 的 A0、 A1、 A2
引脚的输入电平决定(高电平为 1,低电平为 0)。从机地址的第 0 位为读/写启动选择位( R/W):
1 为启动读操作; 0 为启动写操作。
1.2 字节写
字节写操作为每次在 FM24C02A 内部储存器的指定地址写入 1 个字节的数据。主机先
发送起始信号和从机地址( R/W 位为 0)。在接收到 FM24C02A 返回的应答信号后,主机发
送需要写入的数据地址( 1 个字节),然后发送需要写入的数据。在收到 FM24C02A 返回的
应答信号后,主机发送结束信号。
1.3 页写
FM24C02A 支持在一次写操作中连续写入一页的数据( 8 个字节)。页写操作的启动
方式和字节写操作类似,只是主机发送了第 1 个字节的数据后并不是马上停止,而是继
续发送剩余的 7 个字节的数据。 FM24C02A 在每接收到主机发来的 1 个数据都返回 1
个应答信号。当主机的所有数据都发送完毕后,主机发送结束信号。每当 FM24C02A
接收到主机发来的 1 个数据时,数据地址的低三位加 1,而高五位不会变化,保持存储
器的页地址不变。当内部产生的数据地址达到页边界时,数据地址将会翻转,接下来的
数据的写入地址将置为同一页的最小地址。所以若有超过 8 个字节数据写入 FM24C02A,
数据地址将回到最先写入的地址,先前写入的数据将被覆盖。
1.4 当前地址读
FM24C02A 的内部数据地址计数器保留最后一次访问的地址,并自动加 1。只要
FM24C02A 处于上电状态,这个地址在操作运行期间始终有效。在读操作中,如果存
储器的最后一页的最后一个字节开始读,则读下一个字节时地址将会翻转到整个储存器
的最小地址。
主机发送起始信号和从机地址( R/W 位为 1)后, FM24C02A 返回答应信号,然后
向主机发送数据。这时主机接收到数据后,并不返回答应信号,而发送结束信号。
1.5 自由读
自由读需要通过假的字节写操作来获得数据地址。主机首先发送起始信号、从机地址(写操作)和
数据地址来定位需要读取的地址。当 FM24C02A 返回数据地址的应答信号之后,主机马上
重新发送起始信号和从机地址(读操作)。这时 FM24C02A 返回应答信号,然后发送数据。主机接收
到数据后,并不返回应答信号,而发送结束信号。
1.6 连续读
在自由读操作中,若主机在接收了 FM24C02A 发来的数据后,并不发送结束信号,而
是立即返回应答信号,那么 FM24C02A 则自动把数据地址加 1,并将新数据地址的数据发
送给主机。当储存器的数据地址达到最大时,数据地址将翻转到最小地址,并且继续进行连
续读操作。当主机不再返回应答信号,而是发送停止信号时, FM24C02A 停止发送数据。
2. 电路原理
AP-283Demo 板上的 FM24C02A 是连接到 I2C1 总线,见电路图。
在该电路图中, FM24C02A 的 A0、 A1、 A2 引脚电平被拉低,所以 FM24C02A 的从机
地址为 0xA0。
1010 A2 A1 A0 R/W = 1010 000 R/W = 0xA0 + R/W
![](data:image/png;base64,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TE1NO3bsmJaWFh8f37Nnz6FDhxYVFTWqD3ieZ1k2ODh41KhRkDVSqVQuX758x44dYNt3cXH56quvQkND169fb2VldeLEiUWLFpmZmdnb29fX1wsnKUAKeHh41NTUkBWrobWLFi1ydXWFnb6+vqamprCEZnl5+cSJE62srBhBGIiPj09UVJREItmyZYuvr29QUNDatWtJXMZzv5nNDdQHSLOmmeiDRl9nxBpMVAJZSQ/1AfLcIf2uk5OTiYlJu3bt3n///TZt2rRt27Z9+/YffPBB69at27Rp06FDh3bt2rVt27Zdu3ZQpn///rBs+ovo0nQ63YULF/773/8OGTJEJBKR54I4/QwbNqxjx47JycnFxcVmZmaDBg0qKCgweC7IdAbLsiEhIaAPoJIzZ87Mnz8ffCft7e1/+eWXvLy869evX7p06eLFi+vXrx84cKCjoyM4e5JTcxwH/geQsozRZ5GSSqULFiy4fv06FE5LSzM3N09MTKRpuqio6KeffgoODiaPc0lJCfhUVlVVzZs3Ly0t7dGjR9OnTy8tLSXP/qsN6gOkWdM89QH7eKI6oe2X53mtVov6AHnukF+aTCZLSkoKCwu7c+dOZGRkZGRkRETE9evXv/76659//jkwMDAiIiIiIgK+unPnTnJyMuQMfRFdGsdx1dXVY8aMad26tZubm1qt5jhOp9Pl5+cHBwdTFLV///527doFBQUVFxd/++2369evhzQDwhpI/AJN0z4+PiNHjgRnRo7j8vPzly1blpSUVFdX99dff0HoAazLqtPpPDw85syZU11drdVqAwICXF1dExMTDx8+vHPnzh07dqxYsWLr1q07d+48dOgQ+D2IRKJff/3V1tYWpl20Wq2Njc3Ro0flcrm/v//WrVsh7xnHcRUVFY6OjmBaqKurW7ly5f379+/cuTNr1izI2o76AEFeMs1EHxjANYAXjIEoikL/A+RFwOlTegsjIGB/Xl7ekCFDwPrNCzIOwcaLc7mH339UVNTSpUtHjhx58uRJHx+fmzdvXr58OT09neO47OzsWbNmrVy50sHBYdasWTExMY3OdMClKZVKd3f3VatWJSQkQPQETdPh4eFOTk6enp5ubm6QHBr2Q+iElZWVQqFQKpV79+6dO3fuw4cPS0tLS0pKiouLYaOkpKS8vBycDDIzM//8889z585BHkmapkUi0blz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g4PD+vXr7969S9N0fHx8UFCQSCRatWrV6NGjU1NTIecHlD979uz48eNlMhmZc6yurjYxMbG2tjbOD+N5gfoAMSrw7khOTu7Zs2f37t179Ojx8ccfr1u3bty4ca1aterdu/f169dh/UZePzbin93/4MGDB7179+7WrVuPHj1AEwwdOvTtt9/u27evm5tbw/kFjuNSU1M/+eSTw4cPP6lOXt8HeHp6/t///V+PHj26d+/erVu3HTt29O3b9+233x42bFhcXFxD/8Ta2tqZM2dOmDChvLy8meuD/wnHcenp6YcPH969e/fevXstLCz+elXYt2+fhYWFhYWFtbV1Xl5eE+7M3+iqFwTpvTZv3vzmm2++8cYbrVq1euutt9asWbN37949e/bs2bPnRd83+A1YWFiMGzeuW7dusbGxxFHXzs6uVatWa9eu/edn2bFjx+DBg+Ea33zzzTZt2mzatMnCwmL//v27du1q9DI3b97cqVOnuXPnwl0y0AfgfwD/sps3b5qYmJCVoME8YGJiYmVlBX+CE6K3t7epqWl6ejpFUfHx8QEBAQzDlJaWzp07d/LkyXfv3nV2doZrt7Gx+eGHH8DbCSgpKfnss8/OnTtnnB/G8wL1AWJU4NUZGho6b968oKCgiIiIHTt2tGnT5s033xw9enRgYGB9fb3QaYg4JfFPrQ9omnZxcVmzZk1ERER4ePi6devatm379ttvjxs3Ljg4mGSPMWhVWlrahx9+uG/fvkarJW9/iqJOnz69bdu2sLCwoKCgGTNmtG7d+u233549e7YwP7Swq6ipqfn5559Hjx5dWlpqcB+aG8JmNypiWJY9fvz4u+++++9Xi3/961/Q97zxxhuffPKJq6trE+4e/OuJqDUOcMYNGza8+eabb7755r///e9WrVq9oedF3CiDPXCif/3rX//5z38+++yz6Oho4oN86dKl//znP8+3Gf/6179ABsH/C/6EC29Iq1atfvrpJ/jXNLQfjBgxAl4yrq6uXbt29fPzI6+d8vLyAQMGLFy4ECwTIBECAgKGDh2al5cH+iAkJASsobGxsSNHjlywYMGFCxfg3XX+/PlJkyaRmU2WZb29vb/88ssWl18c9QFiVKDLj4+Pj4yMhH60vLzc3NzcwsICVo6vqqoia6iQtXyeSR/A+o2pqakcx9E0nZOTM3r06MOHDysUCq1WKxKJ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)
3. 示例程序
在程序清单 4.4 所示的代码中,通过 I2C 总线在 FM24C02A 内部储存器的 0x00 ~ 0x07
地址连续写入 8 个字节的数据,然后在这些地址中把数据读出来,最后把写入数据和读出数
据进行对比,以检验程序的正确性。
程序清单 4.4 连续写/读程序代码
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <unistd.h>
-
#include <sys/types.h>
-
#include <sys/stat.h>
-
#include <fcntl.h>
-
#include <termios.h>
-
#include <errno.h>
-
-
#define I2C_SLAVE 0x0703
-
#define I2C_TENBIT 0x0704
-
#define I2C_ADDR 0xA0
-
#define DATA_LEN 8
-
#define I2C_DEV_NAME "/dev/i2c-1"
-
-
int main(int arg,char*args[])
-
{
-
unsigned int ret,len;
-
int i,flag=0;
-
int fd;
-
char tx_buf[DATA_LEN + 1]; /* 用于储存数据地址和发送数据 */
-
char rx_buf[DATA_LEN]; /* 用于储存接收数据 */
-
char addr[1]; /* 用于储存读/写的数据地址 */
-
addr[0] = 0; /* 数据地址设置为 0 */
-
-
fd = open(I2C_DEV_NAME, O_RDWR); /* 打开 I2C 总线设备 */
-
if(fd < 0) {
-
printf("open %s failed\n", I2C_DEV_NAME);
-
return -1;
-
}
-
-
ret = ioctl(fd, I2C_SLAVE, I2C_ADDR >> 1); /* 设置从机地址 */
-
if (ret < 0) {
-
printf("setenv address failed ret: %x \n", ret);
-
return -1;
-
}
-
-
/* 由于没有设置从机地址长度,所以使用默认的地址长度为 8 */
-
tx_buf[0] = addr[0]; /* 发数据时,第一个发送是数据地址 */
-
for (i = 1; i < (DATA_LEN + 1); i++) /* 初始化要写入的数据:0, 1, ..., 7 */
-
tx_buf[i] = i - 1; /* 总共为8个数据: 0 - 7 */
-
-
len = write(fd, tx_buf, DATA_LEN + 1); /* 把数据写入到 FM24C02A, */
-
if (len < 0) {
-
printf("write data failed \n");
-
return -1;
-
}
-
-
usleep(1000*100); /* 需要延迟一段时间才能完成写入 EEPROM */
-
-
/* 读取操作 */
-
len = write(fd, addr, 1); /* 设置要读取的数据地址 */
-
if (len < 0) {
-
printf("write data addr failed \n");
-
return -1;
-
}
-
-
len = read(fd, rx_buf, DATA_LEN); /* 在设置的数据地址连续读入数据 */
-
if (len < 0) {
-
printf("read data faile \n");
-
return -1;
-
}
-
-
printf("read from eeprom:");
-
for(i = 0; i < DATA_LEN; i++) { /* 对比写入数据和读取的数据 */
-
printf(" %x", rx_buf[i]);
-
if (rx_buf[i] != tx_buf[i+1])
-
flag = 1;
-
}
-
-
printf("\n");
-
-
if (!flag) { /* 如果写入/读取数据一致,打印测试成功 */
-
printf("eeprom write and read test sussecced!\r\n");
-
}
-
else { /* 如果写入/读取数据不一致,打印测试失败 */
-
printf("eeprom write and read test failed!\r\n");
-
}
-
return 0;
-
}
该代码可以交叉编译为 i2c_eeprom_test 程序文件,测试方法:
(1) 把 i2c_eeprom_test 上传到 EasyARM-i.MX283A 的任何目录;
(2) 执行 i2c_eeprom_test 程序。
若 i2c_eeprom_test 程序执行无误,将打印信息
注意:这里刚好是一整页的读写,如果错开了,就会覆盖低地址的数据。