历史上的今天
返回首页

历史上的今天

今天是:2025年08月10日(星期日)

正在发生

2019年08月10日 | 轻松学ARM系列之I2C总线

2019-08-10 来源:eefocus

今天我们来一起学习,arm裸机中对I2C设备学习。包括GPIO,IIC控制器学习。


一、总体架构图

二、I2C操作的一般步骤


2.1  查看s5pv210开发板的I2C相关的硬件原理图


开发板上IIC实际连接电路,AT24C02为EEPROM,大小为2k位,256字节


核心板对应的原理图

2.2  设置GPIO寄存器为I2C功能


配置GPD1CON[0] 和 GPD1CON[1] 为I2C 功能:


GPDCON.GPD1CON = (GPDCON.GPD1CON & (~0xff))| 0x22


2.3 查看I2C控制器相应的章节,对相关的寄存器进行配置


选择设备的发送方式,主发射,从接收模式(这个是由从设备自动决定的)


向寄存器中写入。每个IIC独有的设备地址


数据移位寄存器


2.3.1 查看AT24C02相关的芯片手册,查看操作的顺序


操作的设备的地址为0xa0 , 对应的是写操作, 0xa1 对应的是读操作


2.3.2 对AT24C02按照字节的写操作


对EEPROM 按字节写的操作顺序,先由主设备发送一个start起始信号,发一个字节的设备地址(7 + 1 位 ,写),第9位为ACK应答位,发一字节的地址(表示要往哪个地址空间写数据,一共256个字节地址),接着传送一字节的数据。发一个ACK信号,发送停止信号stop。最多存放256字节的数据



对s5pv210上相关的IIC控制器,进行相应的配置。


2.3.3  对于主设备发送,从设备接收。写操作,往EEPROM中写数据


① 写设备地址

        I2C0.I2CCON0 = 0xe0 ,512分频,使能ACK信号,使能中断

        I2C0.I2CDS0 = 0xa0;//写从机设备地址

        I2C0.I2CSTAT0 = 0xf0;主设备发送,产生start信号

        while (!((I2C0.I2CCON0)& (1 <<4)));如果发送完毕第5位,中断标志位 值为1,表示写设备地址成功。否侧,相当于具有延时的功能。


②写数据的地址,表示要对那一个字节的地址,要对他进行存放数据

        I2C0.I2CCON0 = I2C0.I2CCON0 &( ~(0x1 << 4));表示清除pend状态位,复位操 作写;

        I2C0.I2CDS0 = addr; 从机的地址,0 ~ 255 之间,一个256个字节,因为该芯 片的大小就是2k位,256个字节

        while (!((I2C0.I2CCON0)& (1 <<4)));如果发送完毕第5位,中断标志位 值为1,表示写数据地址成功。否侧,相当于具有延时的功能。


③ 在相应的地址上写上相应的数据

        I2C0.I2CCON0 = I2C0.I2CCON0 &( ~(0x1 << 4));表示清除pend状态位,复位 操作写;

        I2C0.I2CDS = data;

        while (!((I2C0.I2CCON0)& (1 << 4)));如果发送完毕第5位,中断标志位 值为1,表示写数据地址成功。否侧,相当于具有延时的功能。


④发送一个stop信号

        I2C0.I2CSTAT0 &= ~(1<<5); /*STOP signal generation,free bus */

        I2C0.I2CCON0 &= ~(1<<4); /*clean interrup pending bit */


⑤ 至此一次写操作顺利完成,按字节写数据的


2.3.4 对于读数据,主机发送模式,后接收模式,选取的是随机读的相应地址中的数据的方式

① 写设备地址,开启start启动信号

        I2C0.I2CCON0 = 0xe0 ,512分频,使能ACK信号,使能中断

        I2C0.I2CDS0 = 0xa0;//写从机设备地址

        I2C0.I2CSTAT0 = 0xf0;主设备发送,产生start信号

        while (!((I2C0.I2CCON0)& (1 <<4)));如果发送完毕第5位,中断标志位 值为1,表示写设备地址成功。否侧,相当于具有延时的功能。


② 写存放的数据的地址

        I2C0.I2CCON0 = I2C0.I2CCON0 &( ~(0x1 <<4));表示清除pend状态位,复位操 作写;

        I2C0.I2CDS0 = addr & 0xff; 从机的地址,0 ~ 255 之间,一个256个字节,因 为该芯片的大小就是2k位,256个字节

        while (!((I2C0.I2CCON0)& (1 <<4)));如果发送完毕第5位,中断标志位 值为1,表示写数据地址成功。否侧,相当于具有延时的功能。


③ 读设备地址,清pend寄存器,发送一个start信号, 此时主机接收

        I2C0.I2CCON0 = I2C0.I2CCON0 &( ~(0x1 <<4));表示清除pend状态位,复位操作写;

        I2C0.I2CDS0 = 0xa0 | 0x01; //写设备地址,读操作

        I2C0.I2CSTAT = 0xb0; //1011 0000

        while(!(I2C0.I2CCON0&(1<<4))); /*The end of the waiting to be sent */


④读取数据,读数据时不产生ACK信号

        I2C0.I2CCON0 &= ~((1 << 7)| (1 << 4)); 清中断标志位,关闭ACK应答信号

        while (!(I2C0.I2CCON0 & (1 <<4))); 每次操作成功都会产生一个中断标志位

        data = I2C.I2CDS0;


⑤ 发送stop信号

        I2C0.I2CSTAT0 &= ~(1<<5); /*STOP signal generation,free bus */

        I2C0.I2CCON0 &= ~(1<<4); /*clean interrup pending bit */


⑥ 至此完成了一次 随机的读操作


推荐阅读

史海拾趣

Chicago Miniature公司的发展小趣事

为了满足不同客户的需求,CML不断扩展产品线,从最初的光电子产品逐渐拓展到显示器、开关、继电器等多个领域。通过多样化的产品策略,公司成功吸引了更多客户,并扩大了市场份额。同时,CML还积极开拓国际市场,将产品出口到全球多个国家和地区,进一步提升了公司的知名度和影响力。

Goldstar Electron Co Ltd公司的发展小趣事

随着LED技术的兴起,CML敏锐地捕捉到了这一趋势,并成为第一家引进LED灯具的公司。这一决策为公司带来了巨大的发展机遇。CML不断投入研发资源,推出了一系列具有创新性的LED产品,不仅提高了照明效率,还降低了能耗。这使得CML在微型照明领域逐渐取得了领先地位,并赢得了广泛的客户基础。

Advanced Energy公司的发展小趣事

AE公司一直将创新作为企业发展的核心动力。公司不断投入研发资源,推动电源技术的持续创新。同时,AE公司也积极与各大电子企业建立合作伙伴关系,共同推动电子行业的发展。通过与合作伙伴的紧密合作,AE公司不仅获得了更多的市场机会,也提升了自身的技术水平和创新能力。

General Instrument Optoelectronics公司的发展小趣事
用于焊接和更换电路中的元件。
Habia Cable公司的发展小趣事
改进驱动电路,减少失真和杂音。
Crowd_Supply__Inc.公司的发展小趣事

在电子行业的众多初创公司中,Crowd Supply Inc.以其独特的理念和模式崭露头角。公司成立之初,便聚焦于开放式硬件和社区驱动的产品开发,这在当时的行业环境中还是一个较为新颖的概念。创始人团队由一群富有热情和创新精神的电子工程师和产品开发专家组成,他们通过线上平台汇聚了一群同样对电子硬件感兴趣的爱好者和开发者。初期,公司面临资金短缺、市场认可度低等挑战,但通过不断试错和社区反馈,逐渐找到了自己的发展方向。

问答坊 | AI 解惑

基于VB 的台达PLC 与监控计算机的串行通信实现

Implementation of Serial Communication Between MonitoringComputer and Delta PLC Based on Visual Basic…

查看全部问答>

电子工程世界---MCU领域专题报道

各位: 近期,电子工程世界将开展专门针对MCU这一领域的专题报道,全方位,多角度对MCU最新技术及趋势进行分析阐述,同时将MCU应用相关案例,经验汇总,并通过对厂家的专访对其最新产品、性能、指标进行进一步的总结概括。在此期望得到电子产业 ...…

查看全部问答>

PROTEL 99se 中走线的问题

大家好:我的protel 99se中画pcb走线时可以走15度,30度等等好像是任意角度,我不想这样改怎么设置? 正常的是可以走45度,90度,135度 谢谢大家哦!…

查看全部问答>

高分相送:关于TFFS建立时FLASH_BASE_ADRS的定义问题(mpc8379开发板)

情况是板上有两片flash ,一片 32Mnor,一片256Mnand。nor flash驱动已经做好。在做nand flash驱动时,mtd层编写完毕,对socket注册时,定义一个FLASH_NAND_BASE.根据存储分配,在Base Memory Mapped Registers(0xE0000000)和nor flash(0xFC000000 ...…

查看全部问答>

简单问题:如何获取进程空间虚拟地址的实际的物理地址?

反之,如果把一个物理地址映射到进程空间虚拟地址?不是MMU那个虚拟地址…

查看全部问答>

有电力项目方面经验的朋友请进!

哪位有电力方面课题或是中小型的项目,可以谈谈想法,现成的项目也可以,我公司需要购买或者开发。希望我们能合作。我的QQ号31721739 …

查看全部问答>

高分求高手相助, 无法连通电信WAP网关

{                 }else                 {                         ConnMgrSetCon…

查看全部问答>

各位同仁,我还要继续下去吗

本人是做单片机工作的,08年金融危机被公司CUT了…

查看全部问答>

Verilog+HDL数字设计与综合(第二版)

设计前端的设计很不错的一本书…

查看全部问答>