0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术嵌入式Linux工控板EM9160介绍

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-01-14 10:57 次阅读

I2C总线是一种2线制的主从通讯协议,主要运用于器件之间的数据通讯,在嵌入式系统中得到非常广泛的应用。作为一款高性价比的嵌入式Linux工控板,EM9160的对I2C总线提供了良好的支持,其主要特点是EM9160的16位GPIO中的任意位都可作为I2C总线的时钟信号SCL或数据地址信号SDA,这样客户可根据自己整机的具体情况,灵活的配置EM9160的GPIO管脚来作为I2C总线信号。

在Linux环境,I2C的驱动程序已自动加载,其设备文件名为“/dev/em9x60_i2c”。应用程序通过3个IOCTL命令来操作I2C接口:首先需要配置I2C总线资源,包括SCL、SDA信号和通讯速度,然后才能根据具体芯片的特性对其内部寄存器进行读写操作。以下以电力智能终端中广泛使用的RTC芯片RX-8025为例,对I2C的操作流程作进一步的介绍。

硬件电路:RX-8025是一种带I2C总线接口的实时时钟(RTC)芯片,具有精确调整的晶体频率,可满足电力智能终端需求。在下图中,EM9160的GPIO6作为I2C总线的SCL信号、GPIO7作为SDA信号,注意10K上拉是必须的。

I2C总线配置:PWM调用函数fd=open(”/dev/em9x60_i2c”, O_RDWR)打开设备文件后,首先需要配置总线,具体操作是把参数设置到指定的数据结构中,再调用IOCTL命令如下:

struct i2c_config config; //定义在em9x60_drivers.h
config.scl_gpio_num = GPIO6; //GPIO6作为SCL,定义见em9x60_drivers.h
config.sda_gpio_num = GPIO7; //GPIO7作为SCL
config.speed = 0; //=0:正常速度;=1:高速;=2:全速

I2C总线的速度指波特率,=0是最通常的速度,大约200kbps,可用于大多数RTC、AD芯片;=1:高速时指波特率接近400kbps;=2:全速的波特率可高达1Mbps,主要用于存储器类型的芯片。设置操作如下:

rc = ioctl(fd, EM9X60_I2C_IOCTL_CONFIG, &config);

I2C数据写:EM9160的I2C总线写操作,由数据结构struct i2c_io来传递参数和数据,具体定义可查看em9x60_drivers.h。写操作支持一次最多可写入16个字节,但具体写入多少还受I2C器件本身的限制,如RX-8025只支持一次对一个寄存器写入,例如写入30秒到RTC的秒寄存器的具体代码操作如下:

struct i2c_io io_info;
io_info.dev_addr = RX8025_ADDR; //RX8025_ADDR定义在RX-8025.h
io_info.reg_addr = SEC_REG; //SEC_REG定义在RX-8025.h
io_info.data_len = 1; //1个字节
io_info.data_buf[0] = 0x30; //注意是BCD码
rc = ioctl(fd, EM9X60_I2C_IOCTL_WRITE, &in_info); //执行写操作

I2C数据读:EM9160的I2C总线读操作,由数据结构struct i2c_io来传递参数和数据,具体定义可查看em9x60_drivers.h。读操作支持一次最多可写入16个字节,但具体一次读出多少字节还受I2C器件本身的限制,RX-8025支持一次读出多个寄存器的数据,例如一次读取全部日期时间信息共7个字节,具体代码操作如下:

struct i2c_io io_info;
io_info.dev_addr = RX8025_ADDR; //RX8025_ADDR定义在RX-8025.h
io_info.reg_addr = SEC_REG; //SEC_REG定义在RX-8025.h
io_info.data_len = 7; //7个字节
rc = ioctl(fd, EM9X60_I2C_IOCTL_READ, &in_info); //执行读操作

I2C数据读写所用的数据结构中,reg_addr表示被读写器件的寄存器地址,若为单字节地址,该变量的最高位(MSB = D31)应为0;若为双字节地址,地址占用reg_addr的D15 - D0(最低位,LSB),而变量的最高位D31必须置为1。另外,对不需要寄存器的器件,可把reg_addr设置为0xFFFFFFFF,这时驱动程序将不再发送寄存器地址。上述代码中从RX-8025读出的数据均为BCD,通常需要转换成C语言的整型数据类型。

为了方便客户使用RX-8025,我们编写了通过EM9160的I2C驱动程序操作RTC的范例程序,包括启动RTC,设置时间,读取时间等功能。感兴趣的客户可向英利公司技术支持索取范例源码。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式系统
    +关注

    关注

    40

    文章

    3431

    浏览量

    128225
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206738
收藏 人收藏

    评论

    相关推荐

    嵌入式工控机性能特点 嵌入式工控机应用场景

    嵌入式工控机性能特点 嵌入式工控机应用场景 嵌入式工控机是一种专门设计用于工业控制系统的计算机设
    的头像 发表于 02-04 11:35 249次阅读

    嵌入式工控机与传统工控机的区别

    嵌入式工控机与传统工控机的区别  嵌入式工控机和传统工控机是两种不同类型的工业控制计算机设备,虽
    的头像 发表于 02-04 11:35 270次阅读

    嵌入式学习步骤

    开发上测试固件以及在实际设备上进行测试。 嵌入式系统的多样化发展,它将更为广泛地应用于各个领域,实现智能化、网络化、自动化的目标。同时,随着人工智能和机器学习技术的发展,嵌入式系统
    发表于 02-02 15:24

    什么是嵌入式Linux

    什么是嵌入式Linux? 对于很多电气、电信、通信专业的同学来说,对口专业就业方向主要有软、硬件两个方向。无论是对于学生还是就业而言,软硬件的开发学习,嵌入式物联网在近年来无疑是一个摆在面前
    发表于 10-11 13:47

    嵌入式Linux开发教程

    嵌入式Linux开发教程(下册)
    发表于 09-27 07:11

    嵌入式Linux应用开发的完全手册

    障碍。很多人买了开发想进一步练习,却发现不知从何入手。 鉴于上述种种困难及需求,作者结合自己的学习经历、工.作心得写成此书,期望能帮助读者加快嵌入式 Linux 的入门速度,并体会到深入学习
    发表于 09-25 07:12

    信息技术是干什么?

    广播电子技术信息技术
    橙群微电子
    发布于 :2023年09月22日 09:17:48

    基于树莓派的嵌入式Linux开发教学

    树莓派对于全球嵌入式 Linux 开发及教育已经并将继续带来广泛的影响,及早将之引入我国主流的嵌入式开发与教学环境中或将是有益的。尽管传统的 “ARM 开发硬件设计 +
    发表于 09-21 07:09

    嵌入式工控机用途

    控制、监测和管理工业设备和系统。 以下是嵌入式工控机的一些常见用途: 1.自动化控制系统:嵌入式工控机可以用于控制和监控工厂生产线上的设备和机器,提高生产效率和质量。它们能够接收传感器
    的头像 发表于 09-06 17:51 470次阅读

    解析嵌入式工控机与传统工控机的区别

    嵌入式工控机在工控机的应用中日趋成熟,开始在一些领域取代传统工控机。而随着嵌入式技术的发展,
    的头像 发表于 08-17 09:26 658次阅读
    解析<b class='flag-5'>嵌入式</b><b class='flag-5'>工控</b>机与传统<b class='flag-5'>工控</b>机的区别

    嵌入式工控机有什么特点

    【创腾翔】嵌入式工控机有什么特点
    的头像 发表于 08-14 16:53 647次阅读

    嵌入式工控机定义是什么

    嵌入式工控机定义是什么
    的头像 发表于 07-31 17:36 701次阅读

    嵌入式工控机和触摸屏

    创腾翔-嵌入式工控机厂家
    的头像 发表于 07-19 18:09 604次阅读

    什么是嵌入式工控主板,嵌入式工控主板的分类和应用有哪些?

    什么是嵌入式工控主板,嵌入式工控主板的分类和应用有哪些这样的问题,相信对于很多不懂行的人或者是初学者来说,相信一定会很懵逼,那么今天小编就为您一一解答:
    的头像 发表于 07-05 11:15 619次阅读

    嵌入式学习路线你知道吗?

    应用程序开发技术。 5学习嵌入式Linux驱动程序开发 这一阶段主要学习底层嵌入式Linux设备驱动程序开发设计,包括常用的字符设备驱动、块
    发表于 06-14 16:00