ImageVerifierCode 换一换
格式:PPT , 页数:38 ,大小:517.54KB ,
资源ID:5456115      下载积分:5 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/5456115.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(2022年博创嵌入式培训PPT嵌入式Linux下的通信应用(.ppt)为本站上传会员【二***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

2022年博创嵌入式培训PPT嵌入式Linux下的通信应用(.ppt

1、第七章第七章 嵌入式嵌入式LinuxLinux下的通信应用下的通信应用伴随着嵌入式系统技术的发展,纯单机工作已经远远不能满足用户的需求,因此各个系统之间的信息交互由于具有广泛的应用价值而成为嵌入式技术更深层次的应用。本章将介绍嵌入式Linux系统下的各种通信应用,串口通信、网络通信、蓝牙通信以及CAN总线通信。读者可以尝试把通信编程和之前的各种例子结合起来,完成功能更加完善的应用系统。主要内容主要内容 第一节嵌入式嵌入式Linux下的串口通信下的串口通信第二节嵌入式嵌入式Linux网络编程网络编程第三节嵌入式蓝牙技术嵌入式蓝牙技术第四节CAN总线总线主要内容:主要内容:一、串口简介一、串口简介

2、二、串口编程二、串口编程第一节第一节 嵌入式嵌入式Linux下的串口通信下的串口通信随着计算机系统的应用和微机网络的发展,通信功能显得越来越重要。串口作为计算机一种常用的接口,具有连接线少、通信简单的优点,因此得到广泛应用。特别是在嵌入式系统的开发和应用中,经常需要使用宿主机实现目标机的调试及现场数据的采集和控制,从而通过串口线连接宿主机和目标机,达到通信的目的。现在的PC机一般有两个串行口:COM1和COM2,我们可以选择任何一个进行连接,然后在操作系统上面进行正确的配置。Windows操作系统和Linux操作系统都能够很好地支持串口,特别是在Linux环境下可以对串口通信简单地进行编程,下

3、面就来介绍串口编程。第一节第一节 嵌入式嵌入式Linux下的串口通信下的串口通信一、串口简介一、串口简介在Linux系统环境下的所有设备都提供了相应的设备文件供用户访问,设备文件都位于/dev目录下。COM1和COM2对应的文件分别为/dev目录下的ttyS0和ttyS1,我们可以通过打开并读写这两个文件来对串口进行操作。使用open()函数打开串口的例子如下:int fd;/*以读写方式打开串口以读写方式打开串口*/fd=open(/dev/ttyS0,O_RDWR);if(-1=fd)/*不能打开串口一不能打开串口一*/perror(提示错误!提示错误!);第一节第一节 嵌入式嵌入式Lin

4、ux下的串口通信下的串口通信二、串口编程二、串口编程Termios的结构如下:Struct termiostcflag_t c_iflag;/输入模式输入模式tcflag_t c_oiflag;/输出模式输出模式tcflag_t c_cflag;/控制模式控制模式tcflag_t c_lflag;/局部模式局部模式cc_t c_ccNCCS;/特殊控制字符特殊控制字符在上面的结构体成员中,c_cflag是最常用的,它用于控制串口的波特率、奇偶校验、停止位等。在c_cflag成员中,选项CLOCAL和CREAD是必须的,即本地和接收使能。例如,下面的代码将波特率设为115200、数据位为8位、偶

5、校验并且停止位为1位:options.c_cflag|=B115200|CLOCAL|CREAD|CS8|PARENB;options.c_cflag&=PARODD;options.c_cflag&=CSTOPB;第一节第一节 嵌入式嵌入式Linux下的串口通信下的串口通信二、串口编程二、串口编程所有对串口的操作都是通过结构体termios和几个函数实现的,其中最常用的两个函数是tcgetattr()和tcsetattr()。在一般情况下,程序通过tcgetattr()函数获取设备当前的设置,然后修改这些设置,最后用tcsetattr()使这些设置生效。我们也可以用tcgetattr()函数

6、保存设备的配置,最后在程序结束前用函数tcsetattr()恢复设备的配置。常用的操作结构体termios的函数如下:int tcgetattr(int fd,struct termios*t)该函数用于获得文件描述符fd所表示设备的当前设置值,并将此设置值写入指针t内。若成功,函数返回0,否则返回1。int tcsetattr(int fd,int options,struct termios*t)tcsetattr()函数用来将termios结构指针t内的设置值赋给当前用文件描述符fd表示的设备终端。参数options决定什么时候改变生效第一节第一节 嵌入式嵌入式Linux下的串口通信下的

7、串口通信二、串口编程二、串口编程int cfsetispeed(struct termios*t,speed_t speed);int cfsetospeed(struct termios*t,speed_t speed)上面的两个函数分别用来设置设备的输入和输出速度,通过结构体t分别将设备的输入输出速度设为speed。它们只是设置了termios结构体的速度,若要修改设备的速度还需要调用tcsetattr()函数。int cfgetispeed(struct termios*t);int cfgetospeed(struct termios*t);上面两个函数分别用来获得设备的输入和输出速度

8、int tcflush(int fd,int queue);丢弃写入要引用的对象,其中参数fd为要处理的串口。第一节第一节 嵌入式嵌入式Linux下的串口通信下的串口通信二、串口编程二、串口编程主要内容:主要内容:一、网络通信一、网络通信二、二、Socket简介简介三、网络编程网络编程第二节第二节 嵌入式嵌入式Linux网络编程网络编程随着网络的发展,需要解决网络间不同主机进程间的相互通信问题。为此,首先要解决网络上不同进程的标识问题。在同一主机上,采用唯一的进程号(processID)来标识不同的进程,但是对于网络上的不同主机,可以用相同的进程号来表示没有任何关系的两个进程。同时,操作系统

9、支持的网络协议众多,不同协议的工作方式不同,地址格式也不同。为了解决这些问题,TCP/IP协议引入了地址和端口的概念。地址用来区分网络上不同的主机,即我们常说的IP地址;端口用来区分同一主机上不同的运用程序,由于TCP/IP传输层的两个协议TCP和UDP是相互独立的,因此不同协议的相同端口号并不冲突。第二节第二节 嵌入式嵌入式Linux网络编程网络编程一、网络通信一、网络通信在UNIX系统中,网络应用编程界面有两类:UNIXBSD的Socket和UNIXSystemV的TLI。由于Sun公司采用了支持TCP/IP的UNIXBSD操作系统,使TCP/IP的应用有了更大的发展,其网络应用编程界面S

10、ocket在网络软件中被广泛应用,至今已引进到Windows和VxWorks等操作系统中,成为开发网络应用软件的强大工具。Socket相当于网络上的通信节点,即IP地址加上端口号。应用程序使用了Socket之后,就可以和网络上的任何一个通信节点连接。Socket之间的通信就如同一台PC机上两个进程间的通信一样。在Linux操作系统中,可以将Socket看成是一种设备,即一种可作双向传输的信道,Linux程序可以经过此设备与本地或是远程的程序进行通信。第二节第二节 嵌入式嵌入式Linux网络编程网络编程二、二、Socket简介简介目前,Internet仍使用IPv4作为寻址模式。在Socket中

11、寻址模式的结构为sockadd_in,定义如下:struct sockadd_insa_family_t sin_family;/*addressing mode*/unsigned short int sin_port;/*port number*/struct in_addr sin_addr;/*Internet address*/其中结构成员sin_family用来说明Socket所使用的寻址模式,在网络编程中,其值只能是AF_INET;成员sin_port表示TCP/IP的端口号;成员sin_addr是in_addr结构,用来表示IP地址;而in_addr的结构很简单,只有一个un

12、signedlong型的成员变量。由于IP地址的形式是xxx.xxx.xxx.xxx,它是字符型的数据,要将一个用字符型表示的IP地址转换为unsignedlong型的成员,需要使用如下函数:unsigned long inet_addr(const char*string);第二节第二节 嵌入式嵌入式Linux网络编程网络编程三、网络编程网络编程端口号的获取需要使用下面两个函数。因为一般的Intel架构的CPU采用的是小端模式,而Motorola和Sun公司的机器则使用的是大端模式,为了消除这个差别,必须使用下面两个位排序函数来设置端口号:unsigned long htonl(unsign

13、ed long hostlong);unsigned short htons(unsigned short hostshort);其中,函数htonl()处理长整型的数据,而函数htons()用于处理短整型的数据。用于获取IP地址和端口号的一段代码如下:strunt sockaddr_in adr_srvr;adr_srvr.sin_addr.s_addr=inet_addr(192.168.1.10);adr_srvr.sin_port=htons(8000);网络程序的设计可以采用两种协议:TCP和UDP。TCP是一种可靠的、面向连接的协议,而UDP则是不可靠的、无连接的。第二节第二节 嵌

14、入式嵌入式Linux网络编程网络编程三、网络编程网络编程1,采用,采用TCP协议的网络程序设计协议的网络程序设计在设计网络程序时,一般按照客户端和服务器端进行设计,客户端和服务器端的设计流程是不一样的。第二节第二节 嵌入式嵌入式Linux网络编程网络编程三、网络编程网络编程因为TCP协议是面向连接的,所以在建立连接之前,经历的过程比较多。网络程序无论是使用TCP还是UDP协议,要通过Socket传输数据,都必须建立Socket,可以使用socket()函数建立一个Socket。该函数的原型如下:int socket(int domain,int type,int protocal);参数dom

15、ain的值在网络程序中只能为AF_INET,表示使用Internet协议;参数type为连接的类型,这里的值应为SOCK_STREAM,表示采用TCP建立连接;参数protocal代表通信协议,一般设为0,表示自动选择。bind()函数用于将IPv4Socket寻址结构绑定到其所建立的Socket,这样当有数据包到达时,Linux内核会将这个数据包让给其绑定的Socket来处理。bind()函数的原型如下:int bind(int sockfd,const struct sockaddr_in*my_addr,int adr_len);参数sockfd是调用函数socket()的返回值;参数m

16、y_addr用来存放绑定的IPv4寻址结构;参数adr_len为结构sockaddr_in的长度。第二节第二节 嵌入式嵌入式Linux网络编程网络编程三、网络编程网络编程使用listen()函数来监听、等待客户端的连接请求。该函数的原型如下:int listen(int sockfd,int backlog);参数sockfd为socket()函数的返回值;参数backlog用来指定最大连接数,一般设为5。当服务器端接收到客户端的连接请求时,会把连接请求放在连接队列中,接着用accept()函数处理并接受队列中的请求。int accept(int sockfd,struct sockadd_i

17、n*addr,int addrlen);参数addr用来存放客户端的IP地址,其他两个参数的设置同bind()函数的这两个参数。connect()函数是客户端使用的函数。当客户端建立好Socket后,会调用这个函数向服务器端请求连接。该函数的原型如下:int connect(int sockfd,struct sockaddr_in*serv_addr,int addrlen);参数serv_addr用来存放服务器端的IP地址,其他两个函数的设置方法同上。使用close()函数终止客户端与服务器端的连接。函数运行成功返回0,否则返回1。该函数的原型如下:int close(int sockfd

18、);第二节第二节 嵌入式嵌入式Linux网络编程网络编程三、网络编程网络编程2,采用,采用UDP协议的网络程序设计协议的网络程序设计采用UDP协议进行网络程序设计第二节第二节 嵌入式嵌入式Linux网络编程网络编程三、网络编程网络编程下面主要介绍这个过程中用到的两个特别函数recvfrom()和sendto()。recvfrom()函数的原型如下:int recvfrom(int sockfd,void*buf,int len,unsigned flags,struct sockadd_in*from,int fromlen);参数sockfd为函数socket()的返回值;参数buf用来存放

19、接收的信息;参数len表示接收信息的长度,一般设为sizeof(buf);参数flags一般设为0;参数from为发送端的IP地址;参数fromlen为发送端IP地址的长度,一般设为sizeof(from)。sendto()函数的原型如下:int sendto(int sockfd,void*buf,int len,unsigned flags,struct sockaddr_in*to,int tolen);参数buf用来存放要发送的信息;参数to为接收端的IP地址;其余参数的用法同recvfrom()函数。第二节第二节 嵌入式嵌入式Linux网络编程网络编程三、网络编程网络编程主要内容:主

20、要内容:一、蓝牙技术一、蓝牙技术 二、蓝牙体系结构二、蓝牙体系结构 三、蓝牙通信网络三、蓝牙通信网络 四、四、Linux Bluetooth 软件层软件层 五、五、USB适配器适配器 第三节第三节 嵌入式蓝牙技术嵌入式蓝牙技术蓝牙(bluetooth)技术是由爱立信、Intel、诺基亚、东芝和IBM五家公司于1998年5月共同提出开发的。它是一种用于替代便携或固定电子设备上使用的电缆或连线的短距离无线连接技术。在办公室、家庭和旅途中,通过蓝牙遥控装置可以形成一点到多点的连接,即在该装置周围组成一个“微网”,网内任何蓝牙收发器都可与该装置互通信号。蓝牙计划主要面向网络中各类数据及语音设备,如PC

21、机、笔记本电脑、打印机、传真机、数码相机、移动电话、家电设备等,使用无线微波的方式将它们连成一个微网,多个微网之间也可以互连,从而方便快速地实现各类设备之间的通信。第三节第三节 嵌入式蓝牙技术嵌入式蓝牙技术一、蓝牙技术一、蓝牙技术蓝牙协议体系结构同样采用分层方式,包括蓝牙专用协议和一些通用协议。专用协议位于协议栈的底部,从底到上依次是蓝牙无线层(BluetoothRadio)、基带层(Baseband)、LMP层(LinkManagerProtocol)、L2CAP层(LogicallinkControlandAdaptationProtocol)、RFCOMM(serialcableemul

22、ation)、SDP层(ServiceDiscoveryProtocol)。另外,RFCOMM层以ETSITS07.10为基础,目的是取代电缆连接;TCS(TelephonyControlProtocolSpecification)以ITUT的Q.931为基础,目的是进行呼叫控制。在蓝牙专用协议之上可以承载PPP、TCP/IP、UDP/IP、WAP等通用高层协议。无线层规范物理层无线传输技术。蓝牙工作在2.4GHz的ISM频段,大部分国家采用24002483.5MHz,f2402kMHz,k=078,即将该频段划分为79个带宽为1MHz的信道;在低频端留有2MHz的保护带,在高频端留有3.5M

23、Hz的保护带。调制方式采用GFSK,BT=0.5,正频偏表示“1”,负频偏表示“0”。系统采用跳频扩频技术,抗干扰能力强、保密性好。第三节第三节 嵌入式蓝牙技术嵌入式蓝牙技术二、蓝牙体系结构二、蓝牙体系结构基带层采用查询和寻呼方式,使调频时钟及调频频率同步,为数据分组提供对称连接(SCO)和非对称连接(ASL)并完成数据包的定义、前向纠错、循环冗余校验、逻辑通道选择、信号噪化、加密、编码和解码等功能。它采用混合电路交换和分组交换方式,既适合语言传送,也适合一般的数据传送。每一个语音通道支持64kb/s同步语音,异步通道支持最大速率723.kb/s(反向57.6kb/s)的非对称连接或433.9

24、kb/s的对称连接。LMP负责蓝牙设备之间的链路建立,包括鉴权、加密等安全技术及基带层分组大小的控制和协商。它还控制无线设备的功率以及蓝牙节点的连接状态。L2CAP与LMP平行工作,共同实现OSI的数据链路层的功能,它可提供对称连接和非对称连接的数据服务。RFCOMM在蓝牙的基带上仿真RS232的功能,实现设备串行通信。例如,在拨号网络中,主机将AT命令发送到调制解调器,再传送到局域网,建立连接后,应用程序就可以通过RFCOMM提供的串口发送和接收数据。SDP是蓝牙体系中非常关键的部分,只有通过SDP了解通信双方的设备信息、业务类型、业务特征,然后才能在蓝牙设备之间建立通信连接。第三节第三节

25、嵌入式蓝牙技术嵌入式蓝牙技术二、蓝牙体系结构二、蓝牙体系结构个人通信的目标就是利用各种可能的网络技术,实现人与人之间在任何时间、任何地点进行任何种类的通信。在近距离通信中,蓝牙无线接入技术使无线单元间的通信变得十分容易,将计算机技术与通信技术更紧密地结合在一起,人们可随时随地进行信息的交换与传输。除此之外,蓝牙移动终端还能通过无线方式访问局域网以及Internet等网络,例如:1.实现蓝牙协议与TCP/IP协议的转换。2.在安全的基础上实现蓝牙地址与IP地址之间的地址解析。3.通过路由表对网络内部的蓝牙移动终端进行跟踪、定位。4.在两个不同的piconet(匹克网)的蓝牙移动终端之间交换路由信

26、息。如果目的端位于单位内部的局域网或者Internet,则需要通过蓝牙网关进行蓝牙协议与TCP/IP协议的转换,如果没有IP地址,则由蓝牙网关来提供IP地址,其通信方式为TBGMT。如果目的端位于办公网络内部的另一个匹克网,则通过蓝牙网关来建立路由连接,从而完成整个通信过程的漫游其通信方式为MTBGM_MT(为主移动终端)MT。第三节第三节 嵌入式蓝牙技术嵌入式蓝牙技术三、蓝牙通信网络三、蓝牙通信网络BlueZ是官方LinuxBluetooth栈,由HCI(HostControlInterface)层、Bluetooth协议核心、L2CAP(LogicalLinkControlandAdapt

27、ationProtocol)、SCO音频层、其他Bluetooth服务、用户空间后台进程以及配置工具组成。Bluetooth规范支持针对BluetoothHCI数据分组的UART(通用异步接收器/传送器)和USB传输机制。BlueZ栈对这两个传输机制(drivers/Bluetooth/)都支持。BlueZBNEP(Bluetooth网络封装协议)实现了Bluetooth上的以太网仿真,这使TCP/IP可以直接运行于Bluetooth之上。BNEP模块(net/bluetooth/bnep/)和用户模式pand后台进程实现了Bluetooth个人区域网(PAN)。BNEP使用register_

28、netdev将自己作为以太网设备注册到Linux网络层,并使用上面为WLAN驱动程序描述的netif_rx来填充sk_buffs并将其发送到协议栈。BlueZRFCOMM(net/bluetooth/rfcomm/)提供Bluetooth上的串行仿真,这使得串行端口应用程序(如minicom)和协议(如点对点协议PPP)不加更改地在Bluetooth上运行。RFCOMM模块和用户模式dund后台进程实现了Bluetooth拨号网络。第三节第三节 嵌入式蓝牙技术嵌入式蓝牙技术四、四、Linux Bluetooth 软件层软件层BluetoothUSB适配器拥有一个BluetoothCSR芯片组,

29、并使用USB传输器来传输HCI数据分组。因此,LinuxUSB层、BlueZUSB传输器驱动程序以及BlueZ协议栈是使设备工作的主要内核层。LinuxUSB子系统类似于PCMCIA子系统,它们都有与移动设备交互的主机控制器设备驱动程序,并且都包含一个向主机控制器和单个设备的设备驱动程序提供服务的核心层。USB主机控制器遵循两个标准之一:UHCI(UniversalHostControlInterface)或OHCI(OpenHostControlInterface)。由于具有PCMCIA,单个USB设备的Linux设备驱动程序不依赖于主机控制器。经由USB设备传输的数据分为四种类型(或管道)

30、Control、Interrupt、Bulk和Isochronous。前两种类型通常用于小型消息,而后两种类型则用于较大型的消息。USB设备插入时,主机控制器使用控制管道来枚举它并给它分配设备地址(1127)。主机控制器设备驱动程序读取的设备描述符包含关于设备的信息。Linux的usbcore内核模块支持USB主机控制器和USB设备,并包含USB设备驱动程序可以使用的函数和数据结构。第三节第三节 嵌入式蓝牙技术嵌入式蓝牙技术五、五、USB适配器适配器USB驱动程序利用usbcore及自己的class/subclass/protocol信息注册了两个入口点:probe和disconnect。当

31、附加相应的USB设备时,usbcore用枚举期间从设备配置描述符中读取的class信息来匹配已注册的class信息,并将设备与相应的驱动程序绑定。这个核心使用一种叫做URB(即USBRequestBlock,在include/linux/usb.h中定义)的数据结构来异步地管理主机和设备之间的数据传输。设备驱动程序使用这些例程来请求各种类型的数据传输。传送请求完成后,核心会使用以前注册的回调函数来通知驱动程序。对BluetoothUSB设备而言,HCI命令使用Control管道传输,HCI事件使用Interrupt管道,Asynchronous(ACL)数据使用Bulk管道,而Synchron

32、ous(SCO)音频数据使用Isochronous管道。Bluetooth规范为BluetoothUSB设备定义了class/subclass/protocol代码0 xE/0 x01/0 x01。BlueZUSB传输驱动程序(drivers/bluetooth/hci_usb.c)将该class/subclass/protocol信息注册到LinuxUSB核心。BelkinUSB适配器插入时,主机控制器设备驱动程序会枚举它。因为在枚举期间从适配器读取的设备描述符与hci_usb驱动程序注册到USB核心的信息相匹配,所以这个驱动程序可附加到BelkinUSB设备。由hci_usb驱动程序从以上

33、描述的各个端点读取的HCI、ACL和SCO数据被透明传送到BlueZ协议栈。一旦完成这些工作,通过使用以上描述的BlueZ服务和工具,LinuxTCP/IP应用程序就可以运行在BlueZBNEP上,而串行应用程序则可以运行在BlueZRFCOMM上。第三节第三节 嵌入式蓝牙技术嵌入式蓝牙技术五、五、USB适配器适配器主要内容:主要内容:一、一、CAN总线简介总线简介二、二、CAN总线硬件特征总线硬件特征三、三、CAN控制器驱动控制器驱动第四节第四节 嵌入式蓝牙技术嵌入式蓝牙技术控制器局域网(ControllerAreaNet,CAN)是一种现场总线,主要用于检测及控制各种过程。CAN最初是由德

34、国BOSCH公司为汽车监测和控制而设计的,目前已逐步应用到其他工业控制中,现已成为ISO11898国际标准。CAN总线的优点如下:1.低成本。2.极高的总线利用率。3.数据传输距离很长(长达10公里)。4.数据传输速率高(高达1Mbit/s)。5.可根据报文的ID决定接收或屏蔽该报文。6.可靠的错误处理和检错机制。7.发送的信息遭到破坏后可自动重发。8.节点在错误严重的情况下具有自动退出总线的功能。9.报文不包含源地址或目标地址,仅用标识符来指示功能信息和优先级信息。10.在一个由CAN总线构成的单一网络中,理论上可以挂接无数个节点。第四节第四节 嵌入式蓝牙技术嵌入式蓝牙技术一、一、CAN总线

35、简介总线简介CAN总线的基本组成如图717所示。它包含三个部分:节点控制器S3C2410微处理器、CAN控制器MCP2510或MCP2515芯片、CAN收发器TJA1050或TJA1040芯片。第四节第四节 嵌入式蓝牙技术嵌入式蓝牙技术二、二、CAN总线硬件特征总线硬件特征6kb/s)的非对称连接或433.int socket(int domain,int type,int protocal);MCP2510片选DISABLE。int bind(int sockfd,const struct sockaddr_in*my_addr,int adr_len);前两种类型通常用于小型消息,而后两种

36、类型则用于较大型的消息。例如,下面的代码将波特率设为115200、数据位为8位、偶校验并且停止位为1位:BlueZ是官方Linux Bluetooth栈,由HCI(Host Control Interface)层、Bluetooth 协议核心、L2CAP(Logical Link Control and Adaptation Protocol)、SCO音频层、其他Bluetooth 服务、用户空间后台进程以及配置工具组成。由于具有PCMCIA,单个USB设备的Linux设备驱动程序不依赖于主机控制器。第四节 嵌入式蓝牙技术 二、CAN总线硬件特征该函数用于获得文件描述符fd所表示设备的当前设置

37、值,并将此设置值写入指针t内。CAN最初是由德国BOSCH公司为汽车监测和控制而设计的,目前已逐步应用到其他工业控制中,现已成为ISO-11898国际标准。wait_queue_head_t wq;bind()函数的原型如下:由于IP地址的形式是xxx.由hci_usb驱动程序从以上描述的各个端点读取的HCI、ACL和SCO数据被透明传送到BlueZ协议栈。驱动程序会根据module_init()函数所指定的参数作为入口函数,在CAN控制器驱动中,这个入口函数为s3c2410_mcp2510_init(),它主要完成一些基本的初始化工作。CAN控制器驱动的初始化工作主要有:1.软件复位,进入配

38、置模式。2.设置CAN总线波特率。3.关闭中断。4.设置ID过滤器。5.切换MCP2510到正常状态(Normal)。6.清空接受和发送缓冲区。7.开启接收缓冲区,开启中断(可选)。1.初始化工作完成之后,会引入驱动程序的操作集。第四节第四节 嵌入式蓝牙技术嵌入式蓝牙技术三、三、CAN控制器驱动控制器驱动应用层的read()函数首先调用s3c2410_mcp2510_read,该函数负责用户区和内核区之间的数据传送。之后调用RevRead函数和s3c2410_isr_mcp2510函数对数据缓冲区进行操作,在这个过程中会调用MCP2510_Read函数,它的工作包括:1.在local处理器上关

39、闭中断。2.MCP2510片选ENABLE。3.CAN总线发送流程。4.MCP2510片选DISABLE。5.打开中断。其中,CAN总线发送流程的具体操作顺序如下:1.1)在s3c2410_fops结构中添加写接口。2)用户程序使用CanData数据结构给驱动模块传递参数。3)从用户空间读取待发送的内容。4)对用户空间传递的数据加以解析。5)MCP2510通过SPI接口与处理器传递数据。第四节第四节 嵌入式蓝牙技术嵌入式蓝牙技术三、三、CAN控制器驱动控制器驱动对于写操作,应用层的write()函数首先调用s3c2410_mcp2510_write,该函数负责用户区和内核区之间数据传送。之后调

40、用MCP2510_canWrite函数和MCP2510_Write_Can函数。在该函数中完成CAN的数据结构之后,调用MCP2510_Write函数,它的工作包括:1.在local处理器上关闭中断。2.MCP2510片选ENABLE。3.CAN总线单字节写入操作。4.MCP2510片选DISABLE。5.打开中断。其中,CAN总线单字节写入操作的顺序如下:1.1)SPI总线发送数据函数:SendSIOData()。2)发送单字节写入命令:0 x02。3)发送写入的地址。4)发送写入的内容。第四节第四节 嵌入式蓝牙技术嵌入式蓝牙技术三、三、CAN控制器驱动控制器驱动除了read和write操作

41、ioctl的操作也很重要。CAN控制器的ioctl函数如下:static int s3c2410_mcp2510_ioctl(struct inode*inode,struct file*file,unsigned int cmd,unsigned long arg)其中,参数inode为设备节点,arg为io参数,file为CAN控制器设备的设备文件指针,cmd为io选项第四节第四节 嵌入式蓝牙技术嵌入式蓝牙技术三、三、CAN控制器驱动控制器驱动下面再介绍驱动中常用到的两个数据结构:CanData和Mcp2510_DEV。typedefstructunsignedintid;/CAN总线I

42、Dunsignedchardata8;/CAN总线数据unsignedchardlc;/数据长度intIsExt;/是否是扩展帧intrxRTR;/是否是远程帧CanData,*PCanData;typedefstructCanDataMCP2510_CandataMCP2510_CanRevBuffer;/recievedatabufferintnCanRevpos;/recievebufferposforqueuedeventsintnCanReadpos;/readbufferposforqueuedeventsintloopbackmode;wait_queue_head_twq;sp

43、inlock_tlock;Mcp2510_DEV;staticMcp2510_DEVmcp2510dev;第四节第四节 嵌入式蓝牙技术嵌入式蓝牙技术三、三、CAN控制器驱动控制器驱动n本章主要讲述嵌入式linux系统下的各种通信应用,包括串口通信、网络通信、蓝牙通信与CAN总线通信,其中CAN总线是本章的重点和难点。每种通信所对应的协议内容和工作方式是理解每种通信应用过程的关键,建议读者仔细分析,其它的如GPRS、VoIP也可以参照上述思路进行学习。小结小结1.请完成串口通信实验。2.请完成嵌入式网络编程。3.举例描述socket 程序中的大数量和小数据量传输方式的选择和原因。4.请完成蓝牙通信实验。5.请完成Can总线通信实验。6.请举例简述Can数据传输一次数据的大小和回环方式的选择。7.请基于Can总线通信和Qt用户界面实现聊天室程序。8.思考嵌入式Linux下的其它通信方式与协议,并列表进行区分。习题习题

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服