下面介绍一下I2C程序的框架。
IIC控制器不知道数据的含义,它只负责数据的传输,主要是读和写功能的实现。
下图是IIC传输数据的结构。
下图是AT24cxx的写时序图。
下图是AT24cxx的读时序图。
我们的程序应该分为两层,上层是I2C设备,比如AT24cxx,下层是I2C控制器,比如2440。
I2C控制器有很多种,比如2440的I2C控制器,Ti的I2C控制器,他们都分到下层的I2C控制器一层,上层的I2C设备则将I2C的功能进行封装,这样在使用不同芯片的I2C控制器时,我们就直接通过调用设备函数而不关心底层的控制器类型。
通过i2c_transfer函数来调用I2C设备,第一个参数是I2C message,第二个是message的数量。I2C message是一个结构体,其中的元素类型参考uboot中的I2C message来设置。
下图是uboot中的i2c message,参考uboot中的i2c_msg来编写我们自己驱动的I2C message,我们不需要那么复杂,只需要实现读写功能即可。
addr,表明设备地址;
flags,表明是读还是写,写设为0,读设为1;
len,表示要读或写的数据的数量;
buf,数据的缓冲区,对于写,用来指向数据;对于读,用来存取数据。
对于写操作,需要使用两个i2c message,一个用来写地址,一个用来读数据。看要几个message,可以通过start信号的个数来判断,几个s信号就表示需要使用几个message
综上所述,底层共用三个文件。
at24cxx.c,主要存放at24cxx的读写函数;
i2c_controller.c,主要实现i2c控制器的功能,供上层调用。
s3c2440_i2c_controller.c,实现2440的i2c控制器功能,i2c_controller.c会来这里调用相关函数。
关键字:I2C 程序框架 s3c2440
引用地址:
1.10.3_I2C_程序框架_P
推荐阅读最新更新时间:2024-11-13 10:58
S3C2440上LCD驱动(FramBuffer)实例开发详解(一)
嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。 一、开发环境 编译器:arm-linux-gcc-4.3.2 二、背景知识 1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等。通过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/T
[单片机]
wifi网卡RT3070在S3C2440的移植和使用
一、配置内核选择WIFI驱动 1. 将usb wifi插到电脑,在ubuntu使用命令:# lsusb 查看wifi的PID:0x148f, VID:0x3070 2. 搭建环境 (使用的是arm-linux-gcc 4.3.2,内核为:linux 3.4.2) 1) 内核源码打补丁 在终端执行以下命令: # tar xjf linux-3.4.2.tar.bz2 # cd linux-3.4.2 # patch -p1 ../linux-3.4.2_camera_jz2440.patch # cp config_ok .config 2) 配置内核 进入内核目录,根据网卡的VID/PID确定使用哪一个源码,搜索u
[单片机]
BootLoader —— S3C2440
先来看看扬创的bootloader的实现方法: 首先:在汇编中初始化堆栈,中断向量表,MMU,时钟,串口等,然后跳到C语言的Main函数。这部分代码小于4K,放在block0。这个Main函数用来将第二段代码拷备到DRAM中并执行。 其次:进入第二段代码。第二段代码也是先在汇编中初始化堆栈,中断向量表等,然后跳到C语言的Main函数。这部分代码就不用有4K限制了,具体大小由第一段代码决定,因为它本身由第一段代码来搬运。这个Main函数用来显示开机图片以及进度条。然后视串口接收信息运行带有USB下载NK的Eboot或是读取NK映像,启动WINCE系统。 最后:进入第三段代码。这段代码用于通过USB将PC上的NK.nb0或
[单片机]
51单片机——I2C总线EEPROM
我们可以把数据保存在EEPROM中,这样断电数据也不会丢失。 常用的串行总线协议: 目前常用的微机与外设之间进行数据传输的串行总线主要有I2C总线、SPI总线和SCI总线。 I2C总线:以同步串行2线方式进行通信(一条时钟线,一条数据线)。 SPI总线:则以同步串行3线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线)。 SCI总线:是以异步方式进行通信(一条数据输入线,一条数据输出线)。 1-wire :即单线总线,又叫单总线。 例子: 1-wire ——数字温度传感器DS18B20 IIC——oled屏幕 I2C串行总线的组成及工作原理 I2C总线是PHLIPS公司推出的一种串行总线
[单片机]
S3C2440驱动篇之触摸屏驱动分析
一.硬件简介 S3C2440触摸屏接口与ADC接口集成在一起,触摸屏X、Y坐标所产生的模拟信号通过通道7、5输入,2440提供触摸屏接口有4种处理模式:普通转换模式、分离的X/Y轴坐标转换模式、自动X/Y轴坐标转换模式、等待中断模式。具体参考2440硬件手册16章。 二.驱动实现 下面是触摸屏驱动源码,其中使用了linux输入子系统input。暂时还没研究这一块,想深入了解可参考相关资料。 #include linux/errno.h #include linux/kernel.h #include linux/module.h #include linux/slab.h #include linux
[单片机]
s3c2440学习之路-010 sdram
1.主要原理 1.1基础知识 做控制无非就是设置2440的寄存器,只有对寄存器中的那些参数有一定的感性认识可以明白为什么有这个参数,这个参数的实际意义何在。所以在学习SDRAM需要先补充一些基础知识,可以搜索 “高级进阶终极内存技术指南” ,这里面对SDRAM的工作原理、专用名词做了非常好的讲解。下面贴出我在阅读 “高级进阶终极内存技术指南” 时做的一些记录。 1,P-Bank 物理块,指的就是有多少个内存芯片 2,L-Bank 逻辑块,存储阵列, 1个P-Bank可以包含多个L-Bank 3,主要的引脚有: 1)片选信号,用来选择P-Bank 2)L-Bank地址信号, 用来选择L-Bank 3)行/列 地址 4)数
[单片机]
S3C2440裸机之用查询方式按键控制LED
前言 本文基于JZ2440开发板 一、思维导图 二、代码 1.key_led.c 代码如下(示例): /************************************************************************ * * 文件名:key_led.c * * 功能: 用EINT0(GPF0)按键控制D12(GPF6), 用EINT2(GPF2)按键控制D11(GPF5), 用EINT11(GPG3)按键控制D10(GPF4) * * 创建人:LiZhenhao * * 时间:2021年10月9日16:49:52 * * 版本号:1.0 * * 修改记录:无 * ********
[单片机]
I2C 协议之软件模拟时序
1.1 I2C 简介 I2C 总线时 PHILIPS 公司推出的一种串行总线,具备多主机系统所需的包括总线仲裁和高低速器件同步功能的高性能串行总线。它只需要两跟双向的信号线,一根数据线 SDA,一个是时钟线 SCL。在 I2C 总线上面,每个器件都有自己相应的 I2C 地址,所以在两个器件之间进行通信的时候,都要首先呼叫你想要通信的器件地址,然后等待相应的从器件进行应答之后才开始通信。首先我们来看一下,一个 I2C 信号传输的一个过程,如图: 从图上我们可以看出在 I2C 上面一个完整信号的传输过程,一定要有一个始信号,还有一个结束信号,在每个字节传输结束的时候,从机还要提供一个应答信号。一个完整的信号传输就是
[单片机]