基于μC/OS-II的光盘伺服控制系统的设计
摘要:介绍以Hitachi公司的H8S/2357F作为控制处理器,μC/OS-II作为嵌入式实时操作系统的光盘伺服控制系统的设计和实现。该设计可以实现CD-ROM、CD-R/RW和DVD的伺服功能,适用于光盘伺服控制系统,具有便于维护、易于扩展等优点,对于支持多格式光盘的驱动器和播放器的实现,具有重要的参考价值。
关键词:μC/OS-II 嵌入式实时操作系统 伺服控制 光盘
光盘伺服控制系统是典型的光机电一体化的控制系统,是光盘驱动器和CD/VCD/DVD播放器的重要组成部分。目前业界普遍采用单片机与伺服控制数字信号处理器配合实现的结构,已可单片化(将单片机和伺服控制数字信号处理器集成在一块芯片上)实现光盘伺服控制系统。不论是芯片组的形式,还是单片化的形式,都少不了以板级控制软件(也称为固件)实现控制系统。目前普遍采用的方案是利用运行于单片机的小型嵌入式操作系统实现光盘伺服系统。
javascript:window.open(this.src);" style="cursor:pointer;"/>
为采用自行研发的光盘伺服信号处理器实现支持多格式光盘的伺服控制系统,笔者对光盘伺服控制系统做了比较深入的研究。本文介绍了一种以Hitachi的H8S/2357F作为控制处理器,μC/OS-II作为嵌入式实时操作系统的光盘伺服控制系统的设计和实现。
1 光盘伺服控制系统的硬件设计
光盘伺服控制系统的硬件设计如图1所示。该设计采用自行研发的伺服数字信号处理器、Hitachi公司的H8S/2357F高性能16位微控制器、AKM公司的AK8566、TI公司的SSI3736等芯片实现CD-ROM、DVD和CD-R/RW的伺服功能。并在该系统中完成对自行研发的光盘伺服数字信号处理器设计的验证,为光盘伺服系统的产品化做好准备。
javascript:window.open(this.src);" style="cursor:pointer;"/>
2 光盘伺服控制系统的软件设计
系统分析和软件设计是光盘伺服控制系统实现的难点之一,设计的优劣关系到系统的读碟能力、使用寿命、稳定性、扩展性、维护性等性能。因为要兼顾DVD、CD和CD-R/RW等光盘格式和各种不同的机械参数的设置,伺服控制软件的设计变得相对复杂。为了使控制逻辑明了和易于实现,采用在H8S/2357F上运行μC/OS-II实现光盘伺服控制系统是一个比较好的选择。H8S/2357F的资源比较丰富,μC/OS-II在H8上可以很好地运行,易于系统的开发。
光盘伺服系统设计的关键是分析光盘伺服系统,把各个功能在μC/OS-II核的基础上建立起来,使其有机协调地运转,实现光盘伺服控制系统。
图3 执行态的子系统之间的通信和切换关系
2.1 μC/OS-II嵌入式实时多任务操作系统
μC/OS-II是由JEAN J.LABROSSE编写的一个源代码公开、可免费使用的嵌入式实时操作系统。它是μC/OS的一个升级版本。从最老的μCOS到最新的μC/OS-II,已有十多年的历史。它的特点主要有:公开源代码、可移植性、可固化、可裁减、支持多任务、具有可确定性等。μC/OS-II面向中小型嵌入式系统,是基于优先级抢占式的实时多任务操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量、邮箱、消息队列)和内存管理等功能,绝大部分代码用C语言编写,与硬件相关部分用汇编语言编写。
基于μC/OS-II的应用系统工作时,首先把CPU初始化;接着进行操作系统初始化,主要完成任务控制块(TCB)初始化、TCB优先级表初始化、空任务的创建等;然后开始创建新任务,并可在新创建的任务中再创建其他的新任务;最后调用OSSTART()函数启动多任务调度。
2.2 光盘伺服系统的分析
对光盘伺服控制系统的设计和实现已有一些参考资料。根据μC/OS-II的特点和光盘伺服系统工作的具体情况,笔者将实现的光盘伺服系统分为三个运行状态:Power-On State(上电态)、Idle State(空闲态)、Execution State(执行态)。图2表示了设定的三个状态之间的关系和进入各个状态的条件。三个状态中,执行态最为复杂。为了把复杂的问题简单化,把执行态划分为三个子系统:Host Interface(HIS)、Buffer Manager(BM)、 Disk Interface(DIS)。图3表示了这三个子系统之间的联系和进入跳出各个子系统的条件。图4表示了子系统之间的状态变化及其条件,比较明晰地表示了执行态的实现过程。
图4 执行态子系统的任务状态运行关系
2.3 伺服系统的软件结构
经过如上分析,光盘伺服系统初始化后,创建了五个任务:Host Task(主机任务)、Serial Port Task(串口任务)、Disk Read Task(读盘任务)、Disk Write Task(写盘任务)、Servo Task(伺服任务)。任务间通过Semaphore(信号量)和Mailbox(邮箱)进行通信,实现交互控制和任务的切换。图5表明了这五个任务之间的关系。
图5 光盘伺服系统的任务结构框图
下面给出主程序的框架:
void main (void)
{
//初始化处理器和硬件
……
//产生任务
OSTaskCreate(ServoTask,(void*)0,(void*)&ServoTaskStk[511],4);
OSTaskCreate(DiscWrTask,(void*)0,(void*)&DiscWTaskStk[511],6);
OSTaskCreate(DiscRdTask,(void*)0,(void*)&DiscRdTaskStk[511],8);
OSTaskCreate(HostTask,(void*)0,(void*)&HostTaskStk3[511],10);
OSTaskCreate(SerialCmdTask,(void*)0,(void*)&SerialCmdTaskStk[511],3);
OSTaskCreate(ServoTimerTask,(void*)0,(void*)&ServoTimerTaskStk[511],1);
//产生信号量和任务参数
……
//任务开始运行
OSStart();
}
本设计在Hitachi公司提供的开发系统HEW2上编译实现,并在验证系统实测。结果显示:该设计可以实现CD-ROM、DVD和CD-R/RW的功能,适用于光盘伺服控制系统,具有便于维护、易于扩展等优点。对于支持多格式光盘的驱动器和播放器的实现,具有重要的参考价值。