嵌入式开发中I2C协议详细讲解

I2C协议中最重要的一点是I2C地址。这个地址有7位和10位两种形式。7位能够表示127个地址,而在实际使用中基本上不会挂载如此多的设置,所以很多设备的地址都采用7位,所以本文接下来的说明都是基于此。I2C还有一个很重要的概念,就是“主—从”。对于从设备来说,它是啥都不干的,更不会自动发送数据;而主设备,则是起到控制作用,一切都是从它开始。 除了GND以外,I2C有两根线,分别是SDA和SCL,所有的设备都是接到这两根线上。那么,这些设备如何知道数据是发送给它们呢?这就得依靠前面所说到的地址了。设备I2C的地址是固定的,比如0x50,0x60等等。因为只能有127个地址,地址冲突是很常见的,所以一般设备都会有一个地址选择PIN,比如拉高时候为0x50,接地为0x60。如果无论拉高还是接地,都和别的芯片有冲突,那该怎么办呢?答案是:凉拌,没办法。遇到这种情况,只能换芯片了。

我们来看I2C协议中的数据传输时序图:

SCL是时钟,SDA承载的是数据。当SDA从1变动到0,而SCL还是1时,表示开始数据传输。接下来的7位,就是设备的地址。紧接着的是读写标志,其为1时是读取,为0则是写。如果I2C总线上存在着和请求的地址相对应的设备,则从设备会发送一个ACK信号通知主设备,可以发送数据了。接到ACK信号后,主设备则发送一个8位的数据。当传输完毕之后,SCL保持为1,SDA从0变换到

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学员在科院学习期间独立完成制作ARM开发板、开发触摸屏驱动等36个嵌入专题实验项目,1-3个大型项目。其他实验项目如:智能机器人等可在结业后完成。 教学周期:10个月,其第一学期3个月,第二学期5个月,课程实训2个月。 课程编号 教学单元 教学内容 就业岗位 第一学期 教学课时3个月 ZKQ090101 网络原理及linux服务 网络概述;数据通信基础;网络体系结构与协议;局域网;网络互联与TCP/IP协议;Internet及其应用;网络连接设备与技术 •Linux下C开发人员 •面向C嵌入开发人员 ZKQ090102 Linux安装 正确安装Linux操作系统 ZKQ090103 Linux 开发环境与应用程序设计 Linux C 编程基础,gdb调器,Makefile文件概述;Linux系统调用原理;基于系统调用的文件I/O操作;文件上锁,程序机制与功能,特殊文件的操作;串口编程,串口通信的实现;Linux多线程编程 ZKQ090104 嵌入Linux系统基础 Linux的进程管理,特殊进程的操作;Linux进程间的通信(一):管道通信;Linux进程间的通信(二):信号;Linux进程间的通信(三):消息队列与共享内存 ZKQ090105 FPGA1/CPLD EDA技术简介以及CPLD/FPGA 基础知识,QuartusII软件入门;硬件描述语言( VHDL)基本语法和实践;硬件描述语言( Verilog HDL)基本语法和实践;FPGA实验、DSP入门;Altium Designer 6.x电路原理图与PCB设计 ZKQ090106 Linux内核裁剪与移植 嵌入简介;Linux 基础知识;交叉编译;Linux 内核配置;Linux 内核移植;根文件系统制作;Boot Loader 制作。 第二学期 教学课时5个月 ZKQ090201 基于ARM7开发平台设计 ARM技术简介以及基础知识,ARM应用入门;ARM启动代码分析、链接脚本讲解;μC/OS II V2.85在ARM的移植;μC/OS II内核精讲;ARM经典实验。 •高级嵌入开发工程师 •Linux设备驱动开发工程师 •嵌入系统工程师 •嵌入技术支持工程师 •嵌入软件开发工程师 •嵌入硬件开发工程师 •ARM平台嵌入开发工程师 ZKQ090202 基于ARM9开发平台设计 嵌入linux开发平台简介及开发流程;嵌入Linux开发环境的建立;多线程应用程序设计;串行端口程序设计;A/D接口实验;D/A接口实验;简单的嵌入WEB服务器实验;RS-485通讯实验;直流与步进电机实验;内核驱动设计入门――模块方驱动实验;内核驱动设计实验――触摸屏驱动;内核驱动设计――网卡驱动移植及实验;内核驱动设计――LCD驱动移植;音频驱动及实应用实验;USB接口试验 ZKQ090203 FPGA2/SOPC 基于NIOSII嵌入软处理器的SOPC(可编程片上系统)系统的开发基础和设计技巧以及FPGA最小系统设计方法;SOPC实验。 ZKQ090204 Linux网络编程 Socket 套接字(TCP、UDP);原始套接字;多进程、多进程网络编程 ZKQ090205 TCP/IP协议编程 TCP/IP协议分析;构造数据包。 ZKQ090206 C++QT图形编程 Qt开发环境安装与配置;C++面向对象基础;Qt内置组件应用与自定义组件开发;Qt信号与槽机制;Qt模型应用(树、表、栈);Qt多线程与网络;Qt图形开发;Qt内置数据仓库技术(mysql、sqlite);Qt解析XML。 ZKQ090207 嵌入Linux系统原理 Linux内核简介;进程管理及调度;断及断处理程序;下半部和工作队列;内核同步方法;定时器和时间管理;内存管理;进程地址空间;内核调试技术;内核可移植性概述。 ZKQ090208 嵌入Linux驱动开发 设备驱动及内核模块概述;构造和运行模块;编写字符设备驱动程序I;编写字符设备驱动程序II;高级字符驱动程序;与硬件通信;断处理;Linux设备模型;内存映射操作;DMA技术及应用;块设备驱动程序;网络设备驱动程序;贞缓冲设备驱动;PCI设备驱动程序;USB驱动程序。 课程实训 实训课时2个月 3-5名学员组成一个项目小组,项目自选,项目小组提交项目报告,经审核同意后拨付项目经费,在项目指导教师指导下项目实施,项目完成应有成型产品,组织召开项目完成报告会,项目小组提交项目完成报告书,项目结束。
嵌入Linux应用程序开发标准教程(第2版)》主要分为3个部分,包括Linux基础、搭建嵌入Linux环境和嵌入Linux的应用开发。Linux基础部分从Linux基础、基本操作命令讲起,为Linux初学者能快速入门提供了保证。接着系统地讲解嵌入Linux的环境搭建,以及嵌入Linux的I/O与文件系统的开发、进程控制开发、进程间通信开发、网络应用开发、基于断的开发、设备驱动程序的开发以及嵌入图形界面的开发等,并且还安排了丰富的实验内容与课后实践,使读者能够边学边用,更快更好地掌握所学知识。   《嵌入Linux应用程序开发标准教程(第2版)》可作为高等院校电子类、电气类、控制类等专业高年级本科生、研究生学习嵌入Linux的教材,也可供希望转入嵌入领域的科研和工程技术人员参考使用,还可作为嵌入培训班的教材和参考书。 第1章 Linux快速入门 1.1 嵌入Linux基础 1.1.1 Linux发展概述 1.1.2 Linux作为嵌入操作系统的优势 1.1.3 Linux发行版本 1.1.4 如何学习Linux 1.2 Linux安装 1.2.1 基础概念 1.2.2 硬件需求 1.2.3 安装准备 1.3 Linux文件及文件系统 1.3.1 文件类型及文件属性 1.3.2 文件系统类型介绍 1.3.3 Linux目录结构 1.4 实验内容——安装Linux操作系统 1.5 本章小结 1.6 思考与练习 第2章 Linux基础命令 2.1 Linux常用命令 2.1.1 用户系统相关命令 2.1.2 文件相关命令 2.1.3 压缩打包相关命令 2.1.4 文件比较合并相关命令 2.1.5 网络相关命令 2.2 Linux启动过程详解 2.2.1 概述 2.2.2 内核引导阶段 2.2.3 init阶段 2.3 Linux系统服务 2.3.1 独立运行的服务 2.3.2 xinetd设定的服务 2.3.3 系统服务的其他相关命令 2.4 实验内容 2.4.1 在Linux下解压常见软件 2.4.2 定制Linux系统服务 2.5 本章小结 2.6 思考与练习 第3章 Linux下C编程基础 3.1 Linux下C语言编程概述 3.1.1 C语言简单回顾 3.1.2 Linux下C语言编程环境概述 3.2 常用编辑器 3.2.1 进入vi 3.2.2 初探emacs 3.3 gcc编译器 3.3.1 gcc编译流程解析 3.3.2 gcc编译选项分析 3.4 gdb调试器 3.4.1 gdb使用流程 3.4.2 gdb基本命令 3.5 make工程管理器 3.5.1 makefile基本结构 3.5.2 makefile变量 3.5.3 makefile规则 3.5.4 make管理器的使用 3.6 使用autotools 3.6.1 autotools使用流程 3.6.2 使用autotools所生成的makefile 3.7 实验内容 3.7.1 vi使用练习 3.7.2 用gdb调试程序的bug 3.7.3 编写包含多文件的makefile 3.7.4 使用autotools生成包含多文件的makefile 3.8 本章小结 3.9 思考与练习 第4章 嵌入系统基础 4.1 嵌入系统概述 4.1.1 嵌入系统简介 4.1.2 嵌入系统发展历史 4.1.3 嵌入系统的特点 4.1.4 嵌入系统的体系结构 4.1.5 几种主流嵌入操作系统分析 4.2 ARM处理器硬件开发平台 4.2.1 ARM处理器简介 4.2.2 ARM体系结构简介 4.2.3 ARM9体系结构 4.2.4 S3C2410处理器详解 4.3 嵌入软件开发流程 4.3.1 嵌入系统开发概述 4.3.2 嵌入软件开发概述 4.4 实验内容——使用JTAG烧写NandFlash 4.5 本章小结 4.6 思考与练习 第5章 嵌入Linux开发环境的搭建 5.1 嵌入开发环境的搭建 5.1.1 嵌入交叉编译环境的搭建 5.1.2 超级终端和minicom配置及使用 5.1.3 下载映像到开发板 5.1.4 编译嵌入Linux内核 5.1.5 Linux内核源码目录结构 5.1.6 制作文件系统 5.2 U-Boot移植 5.2.1 Bootloader介绍 5.2.2 U-Boot概述 5.2.3 U-Boot源码导读 5.2.4 U-Boot移植主要步骤 5.3 实验内容——创建Linux内核和文件系统 5.4 本章小结 5.5 思考与练习 第6章 文件I/O编程 6.1 Linux系统调用及用户编程接口(API) 6.1.1 系统调用 6.1.2 用户编程接口(API) 6.1.3 系统命令 6.2 Linux文件及文件描述符概述 6.3 底层文件I/O操作 6.3.1 基本文件操作 6.3.2 文件锁 6.3.3 多路复用 6.4 嵌入Linux串口应用编程 6.4.1 串口概述 6.4.2 串口设置详解 6.4.3 串口使用详解 6.5 标准I/O编程 6.5.1 基本操作 6.5.2 其他操作 6.6 实验内容 6.6.1 文件读写及上锁 6.6.2 多路复用串口操作 6.7 本章小结 6.8 思考与练习 第7章 进程控制开发 7.1 Linux进程概述 7.1.1 进程的基本概念 7.1.2 Linux下的进程结构 7.1.3 Linux下进程的模和类型 7.1.4 Linux下的进程管理 7.2 Linux进程控制编程 7.3 Linux守护进程 7.3.1 守护进程概述 7.3.2 编写守护进程 7.3.3 守护进程的出错处理 7.4 实验内容 7.4.1 编写多进程程序 7.4.2 编写守护进程 7.5 本章小结 7.6 思考与练习 第8章 进程间通信 8.1 Linux下进程间通信概述 8.2 管道 8.2.1 管道概述 8.2.2 管道系统调用 8.2.3 标准流管道 8.2.4 FIFO 8.3 信号 8.3.1 信号概述 8.3.2 信号发送与捕捉 8.3.3 信号的处理 8.4 信号量 8.4.1 信号量概述 8.4.2 信号量的应用 8.5 共享内存 8.5.1 共享内存概述 8.5.2 共享内存的应用 8.6 消息队列 8.6.1 消息队列概述 8.6.2 消息队列的应用 8.7 实验内容 8.7.1 管道通信实验 8.7.2 共享内存实验 8.8 本章小结 8.9 思考与练习 第9章 多线程编程 9.1 Linux线程概述 9.1.1 线程概述 9.1.2 线程机制的分类和特性 9.2 Linux线程编程 9.2.1 线程基本编程 9.2.2 线程之间的同步与互斥 9.2.3 线程属性 9.3 实验内容——“生产者消费者”实验 9.4 本章小结 9.5 思考与练习 第10章 嵌入Linux网络编程 10.1 TCP/IP概述 10.1.1 OSI参考模型及TCP/IP参考模型 10.1.2 TCP/IP协议族 10.1.3 TCP和UDP 10.2 网络基础编程 10.2.1 socket概述 10.2.2 地址及顺序处理 10.2.3 socket基础编程 10.3 网络高级编程 10.4 实验内容——NTP协议实现 10.5 本章小结 10.6 思考与练习 第11章 嵌入Linux设备驱动开发 11.1 设备驱动概述 11.1.1 设备驱动简介及驱动模块 11.1.2 设备分类 11.1.3 设备号 11.1.4 驱动层次结构 11.1.5 设备驱动程序与外界的接口 11.1.6 设备驱动程序的特点 11.2 字符设备驱动编程 11.3 GPIO驱动程序实例 11.3.1 GPIO工作原理 11.3.2 GPIO驱动程序 11.4 块设备驱动编程 11.5 断编程 11.6 按键驱动程序实例 11.6.1 按键工作原理 11.6.2 按键驱动程序 11.6.3 按键驱动的测试程序 11.7 实验内容——test驱动 11.8 本章小结 11.9 思考与练习 第12章 Qt图形编程基础 12.1 嵌入GUI简介 12.1.1 Qt/Embedded 12.1.2 MiniGUI 12.1.3 Microwindows、TinyX等 12.2 Qt/Embedded开发入门 12.2.1 Qt/Embedded介绍 12.2.2 Qt/Embedded信号和插槽机制 12.2.3 搭建Qt/Embedded开发环境 12.2.4 Qt/Embedded窗口部件 12.2.5 Qt/Embedded图形界面编程 12.2.6 Qt/Embedded对话框设计 12.3 实验内容——使用Qt编写“Hello,World”程序 12.4 本章小结
第一章 嵌入开发系统概况(70分钟)(第一讲) 一、开发平台硬件资源 二、开发平台软件资源及文档 三、开发平台硬件安装 四、开发平台软件安装 1、VMARE虚拟机的安装 2、LINUX操作系统的安装 3、交叉环境GCC的安装编译 第二章 测试程序讲解 一、整板测试 (33分钟)(第二讲) 1、在u-boot下用串口下载测试程序 2、对各个实验进行演示操作,测试相应模块的功能 3、在u-boot下用网口下载测试程序 二、ADS1.2 开发环境使用及启动代码分析(第二讲) 1、ADS1.2 开发环境使用(22分钟) (1)、工程的建立 (2)、工程的编译分析 (3)、硬件的仿真调试 2、启动代码分析(80分钟) (1)、代码启动流程分析 (2)、相关寄存器配置分析 (3)、44binit.s讲解 (4)、option.s讲解 (5)、memcfg.s讲解 (6)、main.c讲解 (7)、相应头文件讲解 三、S3C444B0X I/O口与断的分析(第三讲) 1、S3C444B0X I/O口(37分钟) (1)、I/O口寄存器配置 (2)、I/O口控制LED代码分析 (3)、UART寄存器配置及代码简要分析 2、 断(46分钟) (1)、断模 (2)、断寄存器配置 (3)、仿真调试按键外部断的程序流程 四、AD温度采集显示、音频接口、NAND flash 读写(第四讲) 1、AD温度采集显示(30分钟) (1)、AD工作原理 (2)、AD寄存器配置 (3)、LM35温度传感器介绍 (4)、代码分析 (5)、仿真演示实验 2、 音频(32分钟) (1)、WAV格及结构分析 (2)、IIS相关寄存器配置及代码分析 (3)、硬件结构分析 (4)、仿真演示实验 3、 NAND Flash (41分钟) (1)、NAND Flash与NOR Flash区别 (2)、芯片参数分析 (3)、硬件结构分系 (4)、对应芯片手册的读写时序分析代码 (5)、仿真演示实验 五、USB D12从设备(108分钟)(第五讲) 1、USB协议介绍 2、下位机代码简要分析 3、DRIVER STUDIO软件的安装 4、上位机驱动sys、inf文件生成概述 5、上位机应用程序的实现 (1)、工程的建立 (2)、代码编写及分析 (3)、对应应用程序编写下位机程序实现USB通信 第三章 ucos讲解(145分钟)(第六讲) 一、uC/OS-II的简单应用 1、uC/OS-II简介 (1)、MAIN函数的结构 (2)、任务的结构 (3)、重要uC/OS-II API函数介绍 (4)、多任务的机制 2、代码分析 (1)、启动代码分析 (2)、相关函数和结构体的介绍 (3)、任务的创建 (4)、S3C44B0X定时器介绍 3、邮箱的实现 (1)、邮箱的建立 (2)、程序流程分析 (3)、仿真演示实验 4、事件的实现 (1)、事件的建立 (2)、程序流程分析 (3)、仿真演示实验 5、uC/OS-II实现AD对LM35温度采集 (1)、uC/OS-II文件目录介绍 (2)、程序讲解 (3)、超级终端显示温度 (4)、编写程序更改超级终端上显示字体和背景的颜色 6、uCOSII_uCGUI实现彩色液晶显示 第四章 嵌入uclinux讲解 一、u-boot移植和分析(90分钟)(第七讲) 1、u-boot介绍 2、u-boot移植介绍 3、u-boot代码烧写进FALSH 4、代码编译分析 (1)、config.mk讲解 (2)、start.S讲解 (3)、memsetup.S讲解 (4)、board.c讲解 (5)、TX44B0.c讲解 (6)、u-boot.lds讲解 (7)、相应头文件讲解 二、uclinux讲解 1、准备工作(5分钟)(第八讲) (1)、uclinux复制 (2)、uclinux移动 (3)、uclinux解压 2、uclinux文件目录介绍(10分钟)(第八讲) 3、启动代码分析(107分钟) (1)、irq.c讲解 (2)、time.c讲解 (3)、head.s讲解 (4)、misc.c讲解 (5)、head-armv.s讲解 (6)、main.c讲解 (7)、version.s讲解 (8)、s3c44b0-rtc.c讲解 (9)、对应头文件讲解 (10)、u-boot用网口烧写uclinux内核并且固化到FLASH运行的流程分析 4、字符驱动程序(15分钟)(第八讲) (1)、字符驱动简介 (2)、file_operations结构体介绍 5、GPIO字符驱动程序(130分钟)(第八讲) (1)、驱动程序编写 (2)、快照的使用 (3)、内核配置 (4)、内核编译 (5)、演示实验 6、断字符驱动程序(52分钟)(第八讲) (1)、驱动程序编写 (2)、内核配置 (3)、内核编译 (4)、演示实验 7、AD字符驱动程序(10分钟)(第八讲) (1)、驱动程序编写 (2)、内核配置 (3)、内核编译 (4)、演示实验 8、RTC字符驱动程序(13分钟)(第八讲) (1)、驱动程序编写 (2)、内核配置 (3)、内核编译 (4)、演示实验 9、网络驱动编程(186分钟)(第九讲) (1)、网络协议简介 (2)、网络驱动框架简介 (3)、结构体、变量、函数介绍 (4)、Source Insight 软件的安装和使用 (5)、8390.h、8390.c、Ne.c、Netdevice.h程序讲解 (6)、网络文件系统NFS的建立与配置 (7)、LINUX内核的配置、编译 (8)、演示开发板与PC机通过NFS实现文件共享 10、块设备-USB主设备CH375驱动编程(122分钟)(第十讲) (1)、USB驱动框架简介 (2)、CH375-hw.h、Ch375-hcd.c程序讲解 (3)、LINUX内核的配置 (4)、设备号的创建 (5)、LINUX内核的编译 (6)、终端环境插入scsi-disk模块、usb核、usb-storage 、ch375-hcd模块 (7)、插入U盘演示实验,显示目录、创建文件夹 总计:1384分钟

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值