在实际实现各个模块功能之前,首先需要编写两个自定义包,分别是 USB 包和 PDIUSBD12包。
USB 包定义了 USB 协议以及 USB 设备相关的数据类型、常量等内容,比如自定义数据类型、设备类型代码值、请求代码值、设备描述符、设备的工作状态机等。设备的工作状态机定义如下:
- - 定义设备的工作状态机
- type TRANSEIVER_STATE
- is ( TS_DISCONNECTED, -- 未连接
- TS_CONNECtiNG, -- 正在连接
- TS_IDLE, -- 闲置
- TS_END_REQUESTHANDLER, -- 请求处理完成
- TS_READ_IR, -- 读取中断寄存器
- TS_READ_LTS, -- 读取最后处理状态
- TS_BUSRESET, -- 总线复位
- TS_SUSPENDCHANGE, -- 挂起改变
- TS_EP0_RECEIVE, -- 端点 0 接收完成
- TS_EP0_TRANSMIT, -- 端点 0 发送完成
- TS_EP2_RECEIVE, -- 端点 2 接收完成
- TS_EP2_TRANSMIT, -- 端点 2 发送完成
- TS_END_RECEIVE, -- 从 PDIUSBD12 读取数据完成
- TS_END_TRANSMIT, -- 向 PDIUSBD12 写数据完成
- TS_SEND_DESCRIPTOR_1ST, -- 首次发送设备描述符
- TS_SEND_DESCRIPTOR, -- 发送设备描述符
- TS_SET_ADDRESS, -- 设置地址
- TS_SET_CONFIGURATION, -- 设置配置
- TS_GET_CONFIGURATION, -- 获取配置
- TS_GET_INTERFACE, -- 获取接口
- TS_SEND_STATUS, -- 发送状态
- TS_CLEAR_FEATURE, -- 清除特性
- TS_SET_FEATURE, -- 启用特性
- TS_SET_INTERFACE, -- 设置接口
- TS_READ_ENDPOINT, -- 从端点读取数据
- TS_WRITE_ENDPOINT, -- 向端点写入数据
- TS_SEND_PASSWORD, -- 发送密码
- TS_SET_PASSWORD_HIGH, -- 设置密码低位
- TS_SET_PASSWORD_LOW, -- 设置密码高位
- TS_SEND_EMPTY_PACKET, -- 发送空包
- TS_STALL, -- 禁止
- TS_ERROR); -- 错误
复制代码
请求类型以及请求的代码定义如下:
- -- 描述符类型
- constant TYPE_DEVICE_DESCRIPTOR: STD_LOGIC_VECTOR(7 downto 0) := X"01";
- constant TYPE_CONFIGURATION_DESCRIPTOR: STD_LOGIC_VECTOR(7 downto 0) := X"02";
- constant TYPE_STRING_DESCRIPTOR: STD_LOGIC_VECTOR(7 downto 0) := X"03";
- constant TYPE_INTERFACE_DESCRIPTOR: STD_LOGIC_VECTOR(7 downto 0) := X"04";
- constant TYPE_ENDPOINT_DESCRIPTOR: STD_LOGIC_VECTOR(7 downto 0) := X"05";
- constant TYPE_POWER_DESCRIPTOR: STD_LOGIC_VECTOR(7 downto 0) := X"06";
- -- 设备描述符相关的代码、索引值等
- constant CODE_DEVICE_CLASS: STD_LOGIC_VECTOR(7 downto 0) := X"DC";
- constant CODE_BCD_USB_HIGH: STD_LOGIC_VECTOR(7 downto 0) := X"00";
- constant CODE_BCD_USB_LOW: STD_LOGIC_VECTOR(7 downto 0) := X"01";
- constant CODE_ID_VENDOR_HIGH: STD_LOGIC_VECTOR(7 downto 0) := X"71";
- constant CODE_ID_VENDOR_LOW: STD_LOGIC_VECTOR(7 downto 0) := X"04";
- constant CODE_ID_PRODUCT_HIGH: STD_LOGIC_VECTOR(7 downto 0) := X"66";
- constant CODE_ID_PRODUCT_LOW: STD_LOGIC_VECTOR(7 downto 0) := X"06";
- constant CODE_BCD_DEVICE_HIGH: STD_LOGIC_VECTOR(7 downto 0) := X"00";
- constant CODE_BCD_DEVICE_LOW: STD_LOGIC_VECTOR(7 downto 0) := X"01";
- constant CODE_NUMBER_CONFIGURATIONS: STD_LOGIC_VECTOR(7 downto 0) := X"19";
复制代码
另一个包是 PDIUSBD12 包,它定义的则是和 PDIUSBD12 相关的内容,比如 PDIUSBD12 的命令代码值、中断代码值等内容。对 PDIUSBD12 控制命令的定义如下:
- -- PDIUSBD12 控制命令
- constant D12_COMMAND_ENABLE_ADDRESS: STD_LOGIC_VECTOR(7 downto 0) := X"D0";
- constant D12_COMMAND_ENABLE_ENDPOINT: STD_LOGIC_VECTOR(7 downto 0) := X"D8";
- constant D12_COMMAND_SET_MODE: STD_LOGIC_VECTOR(7 downto 0) := X"F3";
- constant D12_COMMAND_SET_DMA: STD_LOGIC_VECTOR(7 downto 0) := X"FB";
- constant D12_COMMAND_READ_IR: STD_LOGIC_VECTOR(7 downto 0) := X"F4";
- constant D12_COMMAND_SEL_EP0_OUT: STD_LOGIC_VECTOR(7 downto 0) := X"00";
- constant D12_COMMAND_SEL_EP0_IN: STD_LOGIC_VECTOR(7 downto 0) := X"01";
- constant D12_COMMAND_SEL_EP1_OUT: STD_LOGIC_VECTOR(7 downto 0) := X"02";
- constant D12_COMMAND_SEL_EP1_IN: STD_LOGIC_VECTOR(7 downto 0) := X"03";
- constant D12_COMMAND_SEL_EP2_OUT: STD_LOGIC_VECTOR(7 downto 0) := X"04";
- constant D12_COMMAND_SEL_EP2_IN: STD_LOGIC_VECTOR(7 downto 0) := X"05";
- constant D12_COMMAND_READ_LTS_EP0_OUT: STD_LOGIC_VECTOR(7 downto 0) := X"40";
- constant D12_COMMAND_READ_LTS_EP0_IN: STD_LOGIC_VECTOR(7 downto 0) := X"41";
- constant D12_COMMAND_READ_LTS_EP1_OUT: STD_LOGIC_VECTOR(7 downto 0) := X"42";
- constant D12_COMMAND_READ_LTS_EP1_IN: STD_LOGIC_VECTOR(7 downto 0) := X"43";
- constant D12_COMMAND_READ_LTS_EP2_OUT: STD_LOGIC_VECTOR(7 downto 0) := X"44";
- constant D12_COMMAND_READ_LTS_EP2_IN: STD_LOGIC_VECTOR(7 downto 0) := X"45";
- constant D12_COMMAND_RW_BUFFER: STD_LOGIC_VECTOR(7 downto 0) := X"F0";
- constant D12_COMMAND_ACK_SETUP: STD_LOGIC_VECTOR(7 downto 0) := X"F1";
- constant D12_COMMAND_CLEAR_EP_BUFFER: STD_LOGIC_VECTOR(7 downto 0) := X"F2";
- constant D12_COMMAND_ENABLE_BUFFER: STD_LOGIC_VECTOR(7 downto 0) := X"FA";
复制代码
鉴于篇幅原因,以上介绍的仅仅是 USB 包和 PDIUSBD12 包的部分内容,详细的定义方法和格式等内容请读者参考源代码中的 USB_Package.vhd 文件和 PDIUSBD12_Package.vhd 文件。
0
|
|
|
|