当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]嵌入式系统串行设备管理的研究与实现

引言

随着微电子技术的发展,嵌入式系统的功能越来越强大,像 UART口、IrDA、USB、I2C以及SPI这些串行接口或设备同时存在于一个嵌入式系统中,实现对它们的统一管理将能极大地提高整个嵌入式系统的可移植性、易用性以及开发效率。本文通过对嵌入式系统串行设备管理技术的研究,提出了“带USB的串行管理”模型,并详细阐述了串行设备管理的实现过程。

串行设备管理

串行设备管理是指对COM,IrDA、I2C、modem等流设备和接口的统一管理。具体说,就是通过统一的上层应用层接口和下层驱动层接口实现对串行设备的统一管理和透明化处理,从而提高整个系统的易用性和可移植性。USB作为一种新型的高速串行总线,由于具有复杂性和高速性等特点,在嵌入式操作系统中一般专门为其建立一个USB模型而不放入串行设备管理中。虽然这样有利于全面地管理USB主机、USB Hub以及USB设备,但整个模型实现代码大而难,且在嵌入式系统下位机中多是USB设备而没有USB主机和USB Hub。针对这一特点,本文把对USB设备的管理加入到串行管理中,使得对USB设备的访问如同对一个串口的访问一样方便,从而提出了带USB的串行管理模型。

带USB的串行管理模型

整个管理模型由两层构成,上层为操作系统应用层接口函数集,主要是统一化的串行流接口函数,如OpenFile等;下层为硬件驱动程序层对象和函数。串行管理的设备对象由虚拟化的HWOBJ结构体来定义,虚拟对象的登记和管理则是通过对DEVICE_LIST结构体的管理来实现。HWOBJ结构体定义为:

typedef struct _HWOBJ {

void *device_parent; //指向DEVICE_LIST结构

unsigned short device_index; //物理设备号,指向实际的串行设备或接口

unsigned lONg bind_flags; //中断服务线程处理标志位,预留

unsigned long IntID; //指定中断类型,预留

void *reserved;

PHW_VTBL func_tbl; //硬件驱动函数对象表

} HWOBJ, *PHWOBJ;

DEVICE_LIST结构体定义为:

typedef struct _DEVICE_LIST {

char *DllName; //设备DLL文件名,预留

unsigned long NumberOf Devices; //设备数量

void *DeviceArray; //设备队列

} DEVICE_LIST, *PDEVICE_LIST;

为了解决USB的高速缓冲问题,专门采用了两个单独的循环队列,一个用于缓冲USB的IN传输数据,一个用于缓冲USB的OUT传输的数据。

带USB的串行设备管理驱动结构如图1所示。

 

 

图1 带USB的串行设备管理驱动结构

带USB的串行管理的实现

为了便于给应用层编程人员和驱动程序编程人员提供良好的编程接口,接口函数采用了与Windows操作系统中提供的API函数一致的函数名和参数。整个带USB的串行管理的实现包括名字解析与应用层接口函数的实现、串行设备低层驱动接口、应用层接口函数与低层驱动接口的数据传输通道的实现。

名字解析与应用层接口函数

这一层的主要任务是实现设备文件到对应设备指针的映射。应用层主要接口函数有CreateFile 、OpenFile、WriteFile、 ReadFile、 CloseFIie等。具体实现上主要是设备名的登记和设备命名空间的管理。设备名的登记是指通过设备登记表来注册设备文件名所对应的物理设备文件名、函数操作指针和设备命名空间等。其中设备命名空间是指文件系统的统一文件与设备的访问接口表,应用程序通过文件系统里的特殊入口(设备文件名设备句柄)访问外围设备。

串行设备低层驱动接口函数

串行设备低层驱动接口通过提供以函数指针为成员的结构体来实现,每一个结构体函数指针成员对应一个具体的硬件驱动函数。

带USB的串行管理的数据传输通道

USB的管理

由于相对于其它串行设备来说,USB是高速设备,且为典型的主从式设备,因此,除了专门为USB采用了两个循环队列外,还针对USB是主控制设备的情况,采取通过自定义双向访问协议包来解决下位机主动发起访问的情况。

串行设备的单道访问

由于串行设备在操作系统应用层被抽象为一个特殊文件,因而需要考虑是否让多个应用程序同时访问一个特殊文件的问题,如果允许同时访问则称为多道访问,否则称为单道访问。为简单起见在设计中通过记录串行设备号对应的运行状态来实现串行设备的单道访问。

多设备的并行访问

通过跟踪正在处于工作中的串行设备的设备号和记数值,来实现多个不同串行设备的并行运行。

数据传输通道

数据传输通道如图2所示。数据传输流程大致如下:程序(线程)调用WriteFile或ReadFile把要发送或接收的地址指针和数据大小传递到相应的硬件属性表中, WriteFile或ReadFile函数返回,应用程序继续运行或挂起等待数据操作完(硬件中断自动完成),最后由中断返回一个消息唤醒挂起程序(线程)。

 

 

图2 数据传输通道

对于USB设备则先通过USB IN和OUT循环队列缓冲再通过USB中断进行传输。

结语

嵌入式操作系统中的串行管理是操作系统I/O子系统的一个重要组成部分,本文介绍的串行管理模块已加入某国产的商用嵌入式操作系统中,并在深圳某高科技公司的SMARTPHONE项目中得到应用。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

威锋电子作为USB4、SuperSpeed USB、USB PD及显示器控制芯片领域的代表性企业,今日正式宣布,其全新产品VL605 USB-C转HDMI 2.1信号转换器已量产上市。该产品不仅支持USB PD 3.1...

关键字: 转换器 显示器 USB

USB Type-C就是这样一个例子;USB Type-C旨在创建一个用于高速数据传输和电力传输的标准接口,仅需一根电缆,取代需要多根电缆的需求

关键字: USB PD特性 移动电源

在FPGA和IC设计领域,经常会面临一个挑战:多个端口同时竞争一个端口的数据。在这种情况下,采用RR调度策略可能是一种解决方案。

关键字: FPGA 嵌入式系统 IC设计

“实现机器人操作系统——电机控制器ROS1驱动程序简介”一文中概述了新型ADI Trinamic™电机控制器(TMC)驱动程序,并讨论了将电机控制器集成到机器人操作系统(ROS)生态系统中的方法。TMC ROS1驱动程序...

关键字: 电机控制器 机器人 嵌入式系统

台湾新竹 – 2024年4月23日 – 著名的微控制器供货商新唐科技公司,与全软件开发生命周期提供跨平台解决方案的全球软件公司Qt Group宣布深化合作,扩展新唐科技人机界面(HMI)平台支持「Qt for MCUs」...

关键字: 微控制器 嵌入式系统 MCU

随着物联网、嵌入式系统以及微控制器技术的飞速发展,微控制器已成为众多智能设备和系统不可或缺的核心组件。而微控制器的正常工作,离不开烧录器的精准操作。C8051F021烧录器,作为一款高效、稳定、易用的微控制器烧录工具,在...

关键字: c8051f021烧录器 联网 嵌入式系统

为增进大家对嵌入式系统的认识,本文将对嵌入式系统、嵌入式系统的特点予以介绍。

关键字: 嵌入式 指数 嵌入式系统

2024年4月18日,国民技术第四代可信计算芯片NS350 v32/v33系列产品正式发布并开始量产供货。NS350 v32/v33是一款高安全、高性能、超值可信密码模块2.0 (TCM 2.0)安全芯片,适用于PC、服...

关键字: PC 服务器平台 嵌入式系统

2024年,嵌入式系统将走向何方?如何才能走在趋势的前沿?从工厂到家电,从医院里昂贵的医疗设备,到随处可见的可穿戴设备,我们身边的联网设备越来越多,生活更加绿色低碳,嵌入式系统功不可没。ST于3月19日成功举办STM32...

关键字: 嵌入式系统 可穿戴设备

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发
关闭
关闭