FT260学习笔记6-HID2UART

当FT260设备插入USB主机,系统会识别到2个HID设备(当DCNF0和DCNF1配置为0或者3时),此时设备0是I2C设备,而设备1才是UART设备。

FT260支持4种流控:

  1. 软件流控(默认),只需要链接RXD,TXD,GND
  2. 通过CTS和RTS的硬件流控
  3. 通过DTR和DSR的硬件流控
  4. 没有流控

1. 设置UART的参数(例如波特率,校验位,停止位等等)

byte[] buf = new byte[64];
buf[0] = 0xa1;
buf[1] = 0x41;
buf[2] = getUartFlowctrlType();
UInt32 baud = getUartBaudrate();
buf[3] = (byte)(baud & 0xff);
buf[4] = (byte)((baud >> 8) & 0xff);
buf[5] = (byte)((baud >> 16) & 0xff);
buf[6] = (byte)((baud >> 24) & 0xff);
buf[7] = getUartDatabit();
buf[8] = getUartParity();
buf[9] = getUartStopbit();
buf[10] = getUartBreaking();

hid.setFeature(buf, 64);

其中波特率,数据位,校验位,停止位,是否断开可以参考AN394文档中的说明。

2. 发送数据

发送UART数据使用的是Interrupt Out,即hid类的sendbuf接口函数。其格式如下:

偏移

含义

说明

Byte 0

Report ID

0xF0-0xFE, 根据发送的实际数据长度选择,4字节对齐,0xF0表示4字节数据(小于4字节也选择4字节),0xFE表示60字节数据

Byte 1

Length

后面数据的实际长度

Byte 2到Byte61

Data

数据

private void uartSend(byte[] sendHex)
{
    if (sendHex.Length == 0)
        return;

    byte maxLen;
    int length = sendHex.Length;
    int index = 0;
    while (length > 0)
    {
        byte[] buf = new byte[hid.OutputReportLength];
        maxLen = (byte)(((sendHex.Length - index) > (hid.OutputReportLength - 2)) ?
            (hid.OutputReportLength - 2) : (sendHex.Length - index));

        buf[0] = (byte)(0xF0 + ((maxLen + 2) >> 2));
        buf[1] = maxLen;
        for (int i = 0; i < maxLen; i++)
        {
            buf[i + 2] = sendHex[index + i];
        }
        hid.SendBuf(buf);
        index += maxLen;
        length -= maxLen;
    }
}

3. 接收数据

接收的数据直接用类Hid的回调函数获取数据。即定义

hid.DataReceived = DataReceived;

private Queue<byte> uartQueue = new Queue<byte>();
public void uartDataReceived(object sender, byte[] e)
{
    lock (uartLocker)
    {
        for (int i = 0; i < e.Length; i++)
        {
            uartQueue.Enqueue(e[i]);
        }

    }
}

其中参数e是接收到的数据。

短接RXD和TXD测试:

注:接收数据需要特别注意,每次从hid.DataReceived读回来的数据只有一个字节,程序界面需要特别注意时间,如果没有及时读取该数据可能会导致数据丢失和错误。可以采用Queue先保留数据,后面再处理显示或者其他。另外,需要增加一个lock防止数据错误。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F103C8 Serial(UART) to USB HID Keyboard Mouse 串口 转 USB键盘鼠标 (1) 使用Composite Device 组合(复合)设备 (1.1) 1个Device -> 1个 Configuation -> 2个Interfance (Keyboard & Mouse) (1.2) Keyboard Interfance -> HID (boot mode) -> 2个Endpoint(IN_0x81 & OUT_0x01) -> KeyboardReportDescriptor(不使用Report ID) (1.3) Mouse Interfance -> HID (boot mode) -> 1个Endpoint(IN_0x82) -> MouseReportDescriptor(不使用Report ID) (1.4) 使用HID boot模式, 不使用Report ID, 以便兼容在 计算器设定BIOS模式 中的操作 (2) 串口接收 命令 (2.1) UART协议: 115200, n, 8, 1 (2.2) 1帧发送字符串格式, 以 '{'开始; '}'结束; ','分隔. 共9个10进制数字 例如: {1,2,3,4,5,6,7,8,9} (2.3) 第9位 区分 Keyboard(64) 或是 Mouse(128) 命令 例如: {0,0,0,0,0,0,0,0,64} --- 发送Keyboard命令 {0,0,0,0,0,0,0,0,128} --- 发送Keyboard命令 (3) 发送Keyboard键盘命令时 : 第1~8位 分别如下 (3.1) 第1位 : Key_Release = 0x00, Left_Control = 0x01, Left_Shift = 0x02, Left_Alt = 0x04, Left_GUI = 0x08, Right_Control = 0x10, Right_Shift = 0x20, Right_Alt = 0x40, Right_GUI = 0x80, 例如: {8,0,0,0,0,0,0,0,64} --- 发送 Win_Key键 {128,0,0,0,0,0,0,0,64} --- 发送 WinApp_Key键 {32,0,0,0,0,0,0,0,64} --- 发送 右Shift键 (3.2) 第2位 : 保留,不使用,一律填0 (3.3) 第3~8位 : 可以同时发送6个Keyboard按键 例如: {0,0,4,5,6,7,8,9,64} --- 发送 'abcdef'键 {2,0,4,5,6,7,8,9,64} --- 按住 左Shift 发送 'abcdef'键 => 'ABCDEF' {0,0,0,5,0,7,0,9,64} --- 发送 'bdf'键 (0表示 无按键) 按键码 可参阅: (HID Usage ID) http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf https://www.hiemalis.org/~keiji/PC/scancode-translate.pdf https://gist.github.com/MightyPork/6da26e382a7ad91b5496ee55fdc73db2 http://www.usb.org/developers/hidpage/Hut1_12v2.pdf (4) 发送Mouse鼠标命令时 : 第1~8位 分别如下 (4.1) 第1位 : Button_Release = 0x00, Left_Button = 0x01, Right_Button = 0x02, Mid_Button = 0x04, 例如: {1,0,0,0,0,0,0,0,128} --- 点击 左键 {2,0,0,0,0,0,0,0,128} --- 点击 右键 {4,0,0,0,0,0,0,0,128} --- 点击 中键 (4.2) 第2~4位 : 移动(X,Y), 滚轮(Wheel) X: -127~127:左右移动鼠标 Y: -127~127:上下移动鼠标 Wheel: -127~127:上下转动滚轮 例如: {0,20,-10,0,0,0,0,0,128} --- 鼠标 右移20,上移10 {0,0,0,-30,0,0,0,0,128} --- 滚轮-30 (4.2) 第5~8位 : 保留,不使用,一律填0
### 回答1: pg142-axi-uartlite.pdf 是关于 AXI-UART Lite 的文档。AXI-UART Lite 是 Xilinx 公司的一款串口通信 IP 核,它是用于与外界设备进行数据传输的一种通信方式。该 IP 核通过 AXI4-Lite 接口与处理器相连,能够处理多种数据格式,包括 8 位数据、无奇偶校验、无流控制等。 pg142-axi-uartlite.pdf 文档详细介绍了 AXI-UART Lite 的各种特性、使用方法和配置方式。文档中描述了该 IP 核的接口、寄存器及寄存器的配置方法,以及该 IP 核支持的数据传输方式、时序图和应用场景。同时,该文档还提供了一些示例代码以供开发人员参考,展示如何在实际应用中使用 AXI-UART Lite。 总之,pg142-axi-uartlite.pdf 文档是一份非常详细的 AXI-UART Lite 使用手册,它为开发人员提供了丰富的技术资料和实践经验,使得开发人员可以更加轻松地使用该 IP 核,快速、高效地完成各种串口通信任务。 ### 回答2: pg142-axi-uartlite.pdf 是一份介绍 AXI-UARTlite 的技术文档。AXI-UARTlite 是一种串口通信 IP,该文档详细介绍了它的特点、寄存器映射、时序图以及使用方法等方面的内容。 在介绍特点方面,文档强调了 AXI-UARTlite 在高效传输数据、低功耗、灵活配置等方面的优势。在寄存器映射方面,文档列出了各个寄存器的地址和功能,同时还给出了相关寄存器的位域描述和初始化值等信息,方便使用者进行开发。时序图方面,文档给出了 AXI-UARTlite 的时序图,包括时钟和复位的时序,以及数据传输时的时序等,帮助使用者更好地理解 AXI-UARTlite 的工作原理。 通过学习该文档,我们可以深入了解 AXI-UARTlite 的设计和使用方法,为开发串口通信相关的硬件和软件提供了很好的参考。同时,对于硬件工程师和嵌入式软件工程师而言,学习 AXI-UARTlite 技术也是一项重要的技能,能够更好地满足各类应用的通信需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值