接上篇文章 介绍完了Host,再来看下Peripheral驱动栈,下图为Peripheral驱动栈的结构图:
风河USB Peripheral驱动栈中,位于底层的是目标控制器TC,它是Peripheral栈中用于连接USB的硬件部分。对于每种类型的TC,都会有对应的TCD,风河提供了Freescale Dual Role、NetChip NET2280、PDIUSBD12和PhilipsIsp1582四种TCD,它们的功能主要包括:
1、实现任何硬件相关的功能;
2、实现寄存器访问,USB Peripheral栈的其它层都不允许实现寄存器访问;
3、为与栈中上层通讯提供entry point。
在这之上就又是HAL(Hardware Adaptation Layer),该层为驱动栈中的更上层提供了硬件独立的访问方式,使得整个驱动栈更容易移植到新的TC硬件上。target layer的功能与之类似,也是一个抽象的中介物。在运行时,目标应用程序会命令目标层Attach一个TCD,之后目标层就负责TCD与目标应用程序间的请求及回应,它可以同时处理多个TCD与应用程序的通讯。所以,这部分的重点就分布在目标层和TCD上。
先看目标层,下图显示了目标层是如何串联应用层和HAL的,并描述了目标层的内部组成:
要通过该层实现通讯,初始化代码和应用程序需要经过以下几步:
1、初始化目标层:和USB Host栈类似,这里有一个初始化代码usbTargInitialize,主要功能也是初始化OS库、创建句柄和互斥访问量,同样的嵌套式调用,所以需要至少调用一次。