IIC总线驱动
Linux下I2C驱动介绍

1、I2C概述I2C是philips公司提供的外设总线,I2C有两条数据线,一条是串行数据线SDA、一条是时钟线SCL,使用SDA和SCL实现了数据的交换,便于布线。
I2C总线方便用在EEPROM、实时钟、小型LCD等与CPU外部的接口上。
2、Linux下的驱动思路Linux系统下编写I2c驱动主要有两种方法:一种是把I2C当做普通字符设备来使用;另一种利用Linux下驱动的体系结构来实现。
第一种方法:优点:思路比较直接,不用花费大量时间去了解Linux系统下I2C体系结构缺点:不仅对I2C设备操作要了解,还有了解I2C的适配器操作不仅对I2C设备器和设备操作需要了解,编写的驱动移植性差,内核提供的I2C设备器都没有用上。
第二种方法:第一种的优点就是第二种的缺点,第一种的缺点就是第二种的优点。
3、I2C框架概述Linux的I2C体系结构分为3部分:1)I2C核心I2C核心提供了I2C总线驱动和设备驱动的注册和注销的方法,I2C 通信方法(algorithm)上层,与具体适配器无关的代码,检测设备上层的代码等。
2)I2C总线驱动I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可以直接受CPU来控制。
3)I2C设备驱动I2C设备驱动是对I2C硬件体系结构中设备端的实现,设备端挂在受CPU控制的适配器上,通过I2C适配器与CPU交换数据。
Linux下的I2C体系结构:1)Linux下的I2C体系结构4、I2C设备驱动编写方法首先让我们明白适配器驱动的作用是让我们能够通过它发出标准的I2C时序,在linux内核源代码中driver/I2C/buss包含一些适配器的驱动,例如s3c2410的驱动I2C-s3c2410.c,适配器被加载到内核中,接下的任务就是实现设备驱动的编写。
编写设备驱动的方法主要分为两种方法:第一种:利用设备提供的I2C-dev.c来实现I2C适配器设备文件,然后通过上层应用程序来操作I2C设备器来控制I2C设备。
详细讲解RT-Thread I2C设备驱动框架及相关函数

详细讲解RT-Thread I2C设备驱动框架及相关函数本应用笔记以驱动I2C接口的6轴传感器MPU6050为例,说明了如何使用I2C设备驱动接口开发应用程序,并详细讲解了RT-Thread I2C设备驱动框架及相关函数。
1 本文的目的和结构1.1 本文的目的和背景I2C(或写作i2c、IIC、iic)总线是由Philips公司开发的一种简单、双向二线制(时钟SCL、数据SDA)同步串行总线。
它只需要两根线即可在连接于总线上的器件之间传送信息,是半导体芯片使用最为广泛的通信接口之一。
RT-Thread中引入了I2C设备驱动框架,I2C 设备驱动框架提供了基于GPIO模拟和硬件控制器的2种底层硬件接口。
1.2 本文的结构本文首先描述了RT-Thread I2C设备驱动框架的基本情况,然后详细描述了I2C设备驱动接口,并使用I2C设备驱动接口编写MPU6050的驱动程序,并给出了在正点原子STM32F4探索者开发板上验证的代码示例。
2 I2C设备驱动框架简介在使用MCU进行项目开发的时候,往往需要用到I2C总线。
一般来说,MCU带有I2C 控制器(硬件I2C),也可以使用MCU的2个GPIO自行编写程序模拟I2C总线协议实现同样的功能。
RT-Thread提供了一套I/O设备管理框架,它把I/O设备分成了三层进行处理:应用层、I/O 设备管理层、底层驱动。
I/O设备管理框架给上层应用提供了统一的设备操作接口和I2C 设备驱动接口,给下层提供的是底层驱动接口。
应用程序通过I/O设备模块提供的标准接口访问底层设备,底层设备的变更不会对上层应用产生影响,这种方式使得应用程序具有很好的可移植性,应用程序可以很方便的从一个MCU移植到另外一个MCU。
本文以6轴惯性传感器MPU6050为例,使用RT-Thread I2C设备驱动框架提供的GPIO模拟I2C控制器的方式,阐述了应用程序如何使用I2C设备驱动接口访问I2C设备。
防止gpio模拟iic驱动被其他线程打断的方法

防止gpio模拟iic驱动被其他线程打断的方法防止GPIO模拟I2C驱动在多线程环境下被打断是一个重要的问题。
在这篇文章中,我将介绍一些方法来解决这个问题,以确保GPIO模拟I2C驱动的稳定性和可靠性。
首先,让我们了解一下什么是GPIO和I2C。
GPIO是通用输入输出端口,它可以用来控制外部设备或读取外部设备的状态。
而I2C是一种通信协议,它可以用于连接和控制多个设备,通过两根线进行数据传输。
在使用GPIO模拟I2C驱动时,我们需要保证驱动程序能够正确地处理并发访问和时序要求。
为了实现这一点,我们可以采取以下几个步骤:1. 锁定访问:在GPIO模拟I2C驱动中,我们可以使用信号量或互斥锁来实现对共享资源的访问控制。
当一个线程访问I2C总线时,它可以获得锁,阻止其他线程同时访问。
2. 设置优先级:在多线程环境中,我们可以通过设置线程的优先级来控制它们的执行顺序。
将GPIO模拟I2C驱动的线程设置为较高的优先级,可以确保它能够及时地响应,并且不会被低优先级的线程打断。
3. 中断处理:在一些特殊情况下,我们可能需要使用中断来处理GPIO模拟I2C驱动的数据请求。
通过配置中断处理程序,我们可以在需要时及时响应外部设备的请求,而不会被其他线程的操作打断。
4. 错误处理:在GPIO模拟I2C驱动中,我们应该实现错误处理机制,以便在发生错误时进行适当的处理。
例如,在发送或接收数据时发生错误,我们可以采取一些补救措施,如重新发送或重新接收数据,以确保数据的可靠性。
综上所述,要防止GPIO模拟I2C驱动在多线程环境下被打断,我们可以采取一系列的措施来确保驱动程序的稳定性和可靠性。
通过锁定访问、设置优先级、中断处理和错误处理等方法,我们可以保证GPIO模拟I2C驱动能够正确地处理并发访问和时序要求,从而实现可靠的数据传输和外设控制。
希望本文能够对需要实现GPIO模拟I2C驱动的开发者有所帮助,并能够在实际应用中发挥指导作用。
单片机 iic 电路接led

单片机 iic 电路接led单片机(Microcontroller)是一种集成电路芯片,具有处理器核心、存储器和各种输入/输出接口。
其中,IIC(Inter-Integrated Circuit)是一种串行通信接口,常用于连接单片机与外部设备进行数据交互。
本文将介绍如何使用单片机的IIC接口来驱动LED灯。
一、LED简介LED(Light Emitting Diode)是一种半导体器件,具有发光特性。
它具有低功耗、长寿命、抗震动等优点,广泛应用于各种电子设备中。
在本文中,我们将使用单片机的IIC接口来控制LED灯的亮灭。
二、IIC接口简介IIC接口是一种双线制的串行总线接口,由SCL(串行时钟线)和SDA(串行数据线)组成。
它具有简单、稳定、可靠的特点,适合于短距离数据传输。
在使用IIC接口前,需要在单片机中配置相应的硬件和软件来实现通信。
三、硬件电路设计我们需要准备一个LED灯和一个适配器,将LED灯的正极连接到单片机的VCC引脚,负极连接到单片机的GND引脚。
然后,将IIC 接口的SCL引脚连接到单片机的SCL引脚,SDA引脚连接到单片机的SDA引脚。
最后,给单片机供电,确保电路连接正确。
四、软件程序设计在软件程序设计中,我们需要使用单片机的编程语言来实现对IIC 接口的控制。
以下是一个示例程序,演示了如何通过IIC接口控制LED灯的亮灭。
```c#include <Wire.h>#define LED_ADDRESS 0x27 // LED设备的地址void setup(){Wire.begin(); // 初始化IIC接口}void loop(){// 向LED设备发送控制命令Wire.beginTransmission(LED_ADDRESS);Wire.write(0x01); // 发送控制命令,使LED灯亮起Wire.endTransmission();delay(1000); // 延时1秒// 向LED设备发送控制命令Wire.beginTransmission(LED_ADDRESS);Wire.write(0x00); // 发送控制命令,使LED灯熄灭Wire.endTransmission();delay(1000); // 延时1秒}```在上述程序中,我们使用了Wire库来操作IIC接口。
TI-I2C驱动

TI-I2C驱动一、与I2C驱动相关的文件分成两部分:1)应用层接口部分:程序在svn中的路径如下:在https://dareglob-971006/svn/eocOS/branches/eocOS_v4/branches/bsp/user/i2c目录下,i2ctest.c文件,提供了lm75a_temp_read()方法,用来读取LM75A设备温度寄存器中的温度信息的功能。
2)内核驱动部分:内核位于svn中的路径如下:https://dareglob-971006/svn/eocOS/branches/eocOS_v4/branches/bsp/kernel(1)总线驱动:i2c-davinci.c:在内核目录中driver/i2c/busses目录下,适用于TI的I2C总线驱动程序。
I2C总线驱动是对I2C硬件体系结构中适配器端的实现。
(2)I2C驱动代码核心:i2c-core.c:在内核目录中driver/i2c/目录下,是I2C代码的核心,用于沟通虚拟文件系统与底层实现。
该文件提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。
(3)I2C设备驱动:lm75.c:在内核目录中driver/hwmon目录下,是针对LM75A以及其他能兼容的温度传感器的设备驱动。
I2C设备驱动是对I2C硬件体系结构中设备端的实现,设备一般挂接在受CPU控制的I2C适配器上,通过I2C适配器与CPU交换数据。
二、I2C简要工作流程1)在总线驱动初始化时候,当通过Linux内核源代码/driver/base/platform.c文件中定义platform_driver_register()函数注册platform_driver结构体时,其中probe指针指向的davinci_i2c_probe()函数将被调用,以初始化适配器硬件。
2)而davinci_i2c_remove()函数则完成与davinci_i2c_probe()相反的功能。
iic总线工作原理(iic总线)

IIC总线工作原理1. 概述IIC(Inter-Integrated Circuit)总线是一种用于连接微控制器和外部设备的串行通信接口。
它由飞利浦公司(现在的恩智浦半导体公司)在1982年开发,并被广泛应用于各种电子设备中。
IIC总线具有简单、灵活、高效的特点,适用于连接各种不同类型的芯片和传感器。
2. IIC总线结构IIC总线由两根信号线组成:SDA(Serial Data Line,串行数据线)和SCL(Serial Clock Line,串行时钟线)。
SDA用于数据传输,而SCL用于同步传输。
3. IIC总线基本原理IIC总线采用主从式结构,在总线上有一个主设备(Master)和一个或多个从设备(Slave)。
主设备负责发起并控制通信过程,而从设备则被动地接受和响应主设备的命令。
3.1 主从式通信在IIC总线上进行通信时,主设备负责生成时钟信号,并通过SDA发送数据。
从设备则根据主设备提供的时钟信号进行数据读取或写入操作。
3.2 起始条件和停止条件为了确保通信的可靠性,IIC总线在数据传输前需要进行起始条件(Start Condition)和停止条件(Stop Condition)的设置。
•起始条件:主设备将SCL线保持高电平的同时,将SDA线由高电平拉低。
这个过程表示通信即将开始,从设备准备好接收数据。
•停止条件:主设备将SCL线保持高电平的同时,将SDA线由低电平拉高。
这个过程表示通信结束,从设备可以终止数据传输。
3.3 时钟同步IIC总线使用时钟同步方式进行数据传输。
主设备通过在SCL线上产生时钟脉冲来驱动数据传输。
每个时钟周期内,主设备和从设备在SDA上读取或写入一个比特位的数据。
3.4 数据帧格式IIC总线采用帧格式进行数据传输,每个帧由一个起始位、8个数据位和一个确认位组成。
起始位指示数据传输的开始,而确认位用于检测通信是否成功。
3.5 主从设备地址为了区分不同的从设备,IIC总线使用7位或10位地址对它们进行编号。
对IIC总线的理解、调用函数以及常见面试问题

对IIC总线的理解、调⽤函数以及常见⾯试问题⼀、IIC 总线概述:IIC 即Inter-Integrated Circuit(集成电路总线)I2C总线是PHLIPS公司推出的⼀种串⾏总线, I2C总线只有两根双向信号线。
⼀根是数据线SDA,另⼀根是时钟线SCL。
每个接到I2C总线上的器件都有唯⼀的地址。
主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。
由总线上接收数据的器件则为接收器。
⼆、IIC 总线通信协议:要掌握IIC的通信协议,需要掌握以下6个通信信号:1.起始信号2.终⽌信号3.写数据4.读数据5.应答信号6.⾮应答信号起始和终⽌信号SCL线为⾼电平期间,SDA线由⾼电平向低电平的变化表⽰起始信号;SCL线为⾼电平期间,SDA线由低电平向⾼电平的变化表⽰终⽌信号。
应答信号IIC 总线协议规定,每传送⼀个字节数据后,都要有⼀个应答信号以确定数据传送是否被对⽅收到。
应答信号由接受设备产⽣,在SCL为⾼电平期间,接受设备将SDA拉低为低电平,表⽰数据传输正确,产⽣应答(ACK)数据传送I2C总线进⾏数据传送时,时钟信号为⾼电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的⾼电平或低电平状态才允许变化。
根据AT24C02的芯⽚,可编写以下信号函数程序://1.起始信号 SCL线为⾼电平期间,SDA线由⾼电平向低电平的变化表⽰起始信号;void IIC_Start(void){SDA = 1;SCL = 1;delay_us(1); //15us >> 4.7usSDA = 0;delay_us(1);SCL = 0;}//2.终⽌信号 SCL线为⾼电平期间,SDA线由低电平向⾼电平的变化表⽰终⽌信号。
void IIC_Stop(void){SDA = 0;SCL = 1;delay_us(1); //15us >> 4.7usSDA = 1;delay_us(1);SCL = 0;}void IIC_SendByte(unsigned char dat) //3.写数据{unsigned char i;for (i = 0; i < 8; i++){if((dat<<i)&0x80)SDA = 1;}else{SDA = 0;}SCL = 1; //开始让数据维持稳定delay_us(1);SCL = 0;delay_us(1);}SDA = 1; //释放总线,发送完8位,主机置⾼电平SCL = 1;delay_us(1);if (SDA) //SDA 低电平从机回馈低电平{ack = 0; //0 == ack 代表⽆ack信号,从机不应答,发送不成功}else{ack = 1; //从机应答,发送成功}SCL = 0;delay_us(5);}unsigned char IIC_RecvByte(void) //4. 读数据{unsigned char i, temp;SDA = 1; //保险⾼的与上低的是低的,线与for (i = 0; i < 8; i++){SCL = 0; // 告诉数据可以变化 SDA 脉冲线//只有在时钟线上的信号为低电平期间,数据线上的⾼电平或低电平状态才允许变化。
有关于iic以及ds18b20驱动的解读

有关于iic以及ds18b20驱动的解读对于任何一个芯片的使用都离不开对芯片手册的解读,手册中的时序图以及协议必须完全的知晓,才能将芯片正确的使用起来:首先来了解一下使用iic协议的比较常见的AT24C02 这款芯片:通过手册我们可以知道:这款芯片有A0、A1、A2着三个地址管脚,将这三个管脚任意的接上VCC或者是GND都可以构成这款芯片的序列号、在实际的使用中就能够通过总线来进行寻址,然后发送地址,就能对应某一个芯片,并且由此可知,总线上最多可以连接8个这样的芯片,只要改变管脚的三个地址位,就能轻松实现对不同的芯片的控制。
芯片上除了这三个地址管脚之外还有一个WP,是用来写保护的,当这个管脚上是高电平的时候,是没有办法将我们所要的数据写进这款芯片中的,只有当它为低电平的时候才能对这款芯片进行操作。
正常情况下,在使用的时候都是通过硬件电路直接将这个管脚连在GND上。
还有就是Vcc跟Vss分别接上+5V和地,SDA和SCL分别是我们这款芯片的数据位和时钟位,也是我们操作这款芯片的重点。
根据手册的解读,我们可以了解到在时钟线为高电平的时候,数据线要保持不变,如果数据线在时钟线高电平期间,由高电平变为低电平,说明了iic总线协议的开始,如果由低电平变为高电平时,说明了总线协议的结束。
在时钟线为低电平的时候才允许数据线进行跳变并进行传输数据。
在解读时序图的时候底下着两张图很重要。
因为这两张图包含了在写时序图当中的一点细节。
如果这些细节没有处理好的话就会出现芯片不会正常工作的状况。
接下类介绍各个驱动的书写和处理:1、起始信号:由上面的时间表查出来的时间显示,起始信号建立的时间至少是4.7us。
因为时序图是完全按照现实的时间走向画出来的,所以从左向右可以想象成是一个时间轴。
然后看上面这张起始信号的图有可以知道,显示SCL由低电平变为高电平然后保持至少4us的时间。
SDA才开始由高电平变为低电平,在低电平的这段时间查表就可知,这个起始信号保持的时间至少是4us。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目:I2C总线驱动
一、设计目的
1、理解IIC总线协议的内容。
2、根据IIC协议编制驱动程序,使用LED数码管显示24LC02某地址存储的
数据。
3、有按键,可设置存储的数据。
二、设计要求
1、根据IIC协议编制驱动程序,使用LED数码管显示24LC02某地址存储的数据。
2、有按键,可设置存储的数据。
三、方案设计与论证
I2C总线特征
I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。
所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。
图1IIC总线规范
I2C总线起始与停止条件
I2C总线在传送数据过程中信号类型:
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
图2 起始和停止条件
I2C总线的数据传输
每一个字节必须保证是8位长度,每次传输可发送的字节数量不受限制。
数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
图3 数据传输时序图
AT24C02简介
AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256
×8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。
AT24C02中带有片内寻址寄存器。
每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的操作。
所有字节都以单一操作方式读取。
为降低总的写入时间,一次操作可写入多达8字节的数据。
图6为AT24C系列芯片的封装图。
各引脚功能如下:
图4 A T24C02及其外围电路
SCL:串行时钟。
在该引脚的上升沿时,系统将数据输入到每个EEPROM器件,在下降沿时输出。
SDA:串行数据。
该引脚为开漏极驱动,可双向传送数据。
A0、A1、A2:器件/页面寻址。
为器件地址输入端。
WP:硬件写保护。
当该引脚为高电平时禁止写入,当为低电平时可正常读写数据。
VCC:电源。
一般输入+5V电压。
VSS:接地。
I2C总线驱动
I2C 总线驱动主要包括I2C 适配器结构i2c_adapter 和I2C 适配器的algorithm
数据结构。
通过I2C 总线驱动的代码,可控制I2C 适配器以主控方式产生开始位、停止
位、读写周期,以及以从设备方式被读写、产生ACK等。
I2C设备驱动
I2C 设备驱动是对I2C 设备端的实现,设备一般挂接在受CPU控制的I2C
适配器上,通过I2C 适配器与CPU交换数据。
I2C 设备驱动主要包括数据结构 i2c_driver 和i2c_client。
整体架构
我们通过对上述四个数据结构的描述和之间的关联的探讨来阐述i2c 驱动的整体架构。
i2c_adapter和i2c_algorithm
i2c_adapter 对应于物理上的一个适配器,i2c_algorithm 则对应一套通信方法。
一个i2c
适配器需要i2c_algorithm 中提供的通信函数来控制适配器上产生特定的访问周期。
缺少i2c_algorithm 的i2c_adapter 什么也做不了,因此i2c_adapter 中包含其使用的i2c_algorithm的指针。
i2c_algorithm中的函数master_xfer()用于产生I2c 访问周期需要的信号。
i2c_driver和i2c_client
i2c_driver 对应一套驱动方法,是纯粹的用于辅助作用的数据结构,它不对应任何物理实体。
i2c_client 对应于具体的物理设备。
i2c_driver 与i2c_client 在前者的attach_adapter函数被调用时会探测物理设备,当确定
一个client存在时,把该client使用的i2c_client 结构的adapter指针指向对应的i2c_adapter,并调用i2c_adapter 的client_register()函数。
i2c_adapter和i2c_client
i2c_adapter 和i2c_client 的关系与I2C硬件体系中适配器和设备的关系一致,即i2c_client依附于i2c_adapter。
一个适配器可以连接多个I2C 设备。
i2c_adapter 中包含i2c_client 的链表。
总结
内核关于I2C 驱动的体系结构关系图如下所示:
图5 关系图
方案一:
将数据“0x0f”写入AT24C02再读出送P1口显示
方案二:
将按键次数写入AT24C02再读出送LED数码管显示。
对按键进行软件消抖处理,通过编程,在按再下键S时,将计数变量加1,然后将计数变量的值写入AT24C02芯片并读出送LED数码管显示。
四、设计原理和电路图如下
(1)IIC驱动电路
设计原理:
AT24C02 的TEST脚为测试端系统中可接地处理 A2 A1 A0可任接因引I2C 总线上可连接多达 8 片总容量为 8*256*8=2048*8 由于片内子地址采用 8 位地址指针寻址超过256*8 时要占用引脚地址如果使用 CAT24WC04 则A0作为子地址软件寻址位使用CAT24WC08 CAT24WC16 时A1 A2 也分别作为子地址的软件寻址位这时相应的外部 A0 A1 A2无效。
AT24CXX 的数据操作格式
在I2C 总线中对CAT24WC02 内部存储单元读写时除了要寻址该器件的节点地址外还须指定存储读写的子地址SUBADR按照CAT24WC02 的器件手册读写N个字节的数据操作格式如下:
器件选择
在I2C 总线接口的通用外围电路中有可实现 LED 驱动控制的 SAA1064 接口芯片该器件可静态驱动 2 位LED 动态驱动 4 位LED 只有一个地址引脚 ADR 但可选择 4 种电平状态故一个 I2C 总线上最多只能挂接 4 个SAA1064 最多可扩展
16 位LED 显示SAA1064 中有动态驱动控制电路不须外部动态驱动管理故在外
部仍呈现出静态LED驱动特性。
电路设计
图3 对A T24C02读写的电路
图驱动LED显示电路
五、元件清单
表1 元件清单
元件序号型号主要参数元件序号型号主要参数
R2 金属膜,0.25w 10K R6 金属膜,0.25w 10K
R3 金属膜,0.25w 10K R7 金属膜,0.25w 10K
R4 金属膜,0.25w 10K R8 金属膜,0.25w 10K
R5 金属膜,0.25w 10K R9 金属膜,0.25w 10K
U1 AT89C51 S 按钮
U2 AT24C02 7SEG 数码管
六、设计总结
I2C总线具有十分完善的总线协议可构成多主系统在协议软件支持下,可自动处理
总线上任何可能的运行状态I2C 总线为双向同步串行总线因此I2C 总线接口内部为双向传输电路,如图2所示。
总线端口输出为开漏结构,故总线上必须有上拉电阻Rp 上拉电阻与电源电压VDD SDA/SCL总线串接电阻Rs 有关可参考有关数据手册选择通常可选5-10k
七、参考文献
[1]《单片机C语言应用100例》,王东峰、王会良等编,电子工业出版社,2009.3
[2]《新概念51单片机C语言教程》,郭天祥编,2007年
[3]《单片机原理及应用(C51语言)》,邓立新主编,清华大学出版社,2012年
[4]《单片机系统设计与开发》,张齐,朱宁西编著,机械工业出版社,2008.8
[5]中国知网
[6]百度网站
[7]电子发烧友
附录1 总体电路。