C8051单片机USB接口程序重点

来源:互联网 发布:物理怎么才能学好 知乎 编辑:程序博客网 时间:2024/05/28 23:22

通用串行总线控制器(USB0)

C8051F340、F380集成了一个完整的全速/低速(速度分为三种:低速<全速<高速)USB功能控制器,用于实现USB外部设备。C8051F410/1/2/3/4/5/6/7不能被用作USB主设备。下面是USB原理框图:
端点地址:
共有4个端点,8个端点管道。端点0是控制端点也是一个双向的IN/OUT端点,其他端点1.2.3是IN/OUT端点。(这里我们一定要分清楚USB协议地址和单片机寄存器地址,不能弄混淆
USB收发器:
用USB0XCN配置USB收发器,主要包括收发器使能/禁止,上拉电阻使能/禁止,器件速度选择(低速/全速)。
SPEED=1时:
USB0工作在全速方式,片内上拉电阻出现在D+引脚(前提是上拉电阻被使能)。
SPEED=0时:
USB0工作在低速方式,片内上拉电阻出现在D-引脚(前提是上拉电阻被使能)。
USB0XCN的位0-4用于收发测试,上拉电阻只在有VBUS信号时被使能。
注:USB收发器使能前,USB0时钟必须是活动的。

USB寄存器访问:
USB控制寄存器是通过USB0地址寄存器(USB0ADR)和USB0数据寄存器(USB0DAT)来访问。目标端点号被写入INDEX寄存器后,就可以访问与目标端点对应的控制/状态寄存器

USB0间接地址寄存器:USB0ADR。(软件在写USB0DAT之前要检测BUSY位,应该为1,在读USB0DAT数据是BUSY位应该为0,0表示USB0DAT寄存器数据有效)


USB0数据寄存器:USB0DAT


USB0控制器寄存器


USB0端点索引寄存器:INDEX


USB时钟配置:
低速方式:USB0时钟为6MHZ,系统时钟12MHZ经过2分频。
全速方式:USB0时钟为48MHZ,系统时钟12MHZ经过4倍频。
注:在使能时钟恢复电路之前,USB收发器必须被使能。


FIFO管理:
1024字节的片内XRAM被用作USB0的FIFO空间。

端点1-3可以被配置为分割方式,高部分为输入端点(IN)使用,低部分由输出端点(OUT)使用。
端点1-3可以被配置为双缓冲方式,不管它是否以及配置为了分割方式没,最大的输入和输出数据包为端点总大小一半或者被分割后一半。


USB0端点FIFO访问寄存器:FIFOn




功能地址:
FADDR寄存器中保存了当前USB0功能地址,USB0接收到的SET_ADDRESS命令中USB0接收到的SET_ADDRESS命令中有7位功能地址,软件应在接收到该命令时将主机分配的7位功能地址写入FADDR寄存器。只有在当前传输结束后(一般是在SET_ADDRESS命令传输的状态段),写入FADDR的新地址才生效(生效之前USB0不响应新地址)。当软件向FADDR寄存器写入新地址时,UPDATE位(FADDR.7)被硬件置‘1’。当新地址生效后,硬件将UPDATE位清‘0’。

USB寄存器POWER:用于在设备级控制USB0(使能/禁止,复位/挂起/恢复控制等)。

USB复位:
当检测到总线上的复位信号时,USBRST位(POWER.3)被硬件置‘1’。
检测到复位信号时会发生以下过程:
1.USB0地址被复位(FADDR = 0x00)。
2.端点FIFO被清空。
3.控制/状态寄存器被复位为0x00(E0CSR、EINCSRL、EINCSRH、EOUTCSRL、EOUTCSRH)。
4.USB寄存器INDEX被复位为0x00。
5.所有USB中断(挂起中断除外)都被使能,对应的中断标志被清除。
6.产生USB复位中断(如果被使能)。

向USBRST位写‘1’将产生异步USB0复位。在发生异步复位后,所有USB寄存器复位到它们的缺省值。


挂起方式:
在挂起检测被使能的情况下(SUSEN =‘1’),当总线上检测到挂起信号时,USB0进入挂起方式,并产生中断(如果中断被使能,即SUSINTE =‘1’)。挂起中断服务程序(ISR)应执行与应用相关的配置任务,如禁止相应的外设和/或配置低功耗方式的时钟源。
怎样退出挂起方式:
1)检测到或产生恢复信号
2)检测到复位信号
3)发生设备或USB复位
如果USB0被挂起,则在发生上述事件时内部振荡器退出挂起方式。

恢复信号:
当总线上检测到恢复信号时,USB0退出挂起方式,并产生恢复中断(如果中断被使能,即RESINTE =‘1’)。软件可以通过向RESUME位(POWER.2)写‘1’来强制产生远程唤醒。当强制产生远程唤醒时,软件应在远程唤醒被启动(RESUME =‘1’)后10 ~ 15ms 向RESUME位写‘0’,以结束恢复信号。

ISO更新:
当软件向ISOUP 位(POWER.7)写‘1’后,ISO 更新功能被使能。在ISO更新功能被使能时,写入到一个ISO IN端点的新数据包要等到收到一个新的帧起始(SOF)信号后才被发送。如果ISO输入端点在收到SOF之前收到一个IN令牌,USB0将发送一个长度为零的数据包。当ISOUP =‘1’时,所有ISO端点的ISO更新功能都被使能。

USB使能:
在上电复位(POR)后USB0被禁止。通过清除USBINH位(POWER.4)来使能USB0。USBINH一旦被写入‘0’,则只能在发生下列事件之一时被置‘1’:1)上电复位(POR),2)向USBRST位(POWER.3)位写‘1’导致的异步USB0复位。

软件应在使能USB0之前执行所有的USB0配置。建议的配置步骤如下:
1.选择并使能USB时钟源。
2.通过向USBRST位写‘1’来复位USB0。
3.配置并使能USB收发器。
4.执行任何一种USB0功能配置(中断、挂起检测)。
5.通过向USBINH位写‘0’来使能USB0。


USB0输入端点中断寄存器:IN1INT


USB输出端点中断寄存器:OUT1INT



USB0公共中断寄存器:CMINT



USB0输入端点中断允许寄存器:IN1IE


USB0输出端点中断允许寄存器:OUT1IE



USB0公共中断允许寄存器:CMIE



串行接口引擎:串行接口引擎(SIE)执行所有低层USB协议,在数据被成功发送或接收后中断处理器。当接收数据时,SIE在接收完一个完整的数据包后中断处理器;相应的握手信号由SIE自动产生。当发送数据时,SIE在发送完一个完整的数据包并且收到相应的握手信号后中断处理器。
当收到损坏/错误的数据包时,SIE不中断处理器

E0CNT寄存器保持端点0 FIFO中的接收数据字节数。


0 0
原创粉丝点击