查看: 2069|回复: 0

[评测分享] 【NXP OKdo E1双核Cortex M33开发板】试用8-USB接口通讯

[复制链接]
  • TA的每日心情
    无聊
    昨天 15:14
  • 签到天数: 2192 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2020-12-7 08:35:55 | 显示全部楼层 |阅读模式
    分享到:
    继续学习开发板的USB外设,USB接口是OKdo E1开发板上引出的为数不多的接口之一,其功能还是很强大的,只是USB协议相对于UART等接口相对复杂,应用门槛也相对会高一些,但是使用NXP的MCUXpresso IDE,可以很方便的进行配置并使用。
    001.png
    OKdo E1开发板有两个Micro USB接口,其中一个是调试下载器使用的,另一个是连接到LPC55S69,作为USB通讯使用的。
    002.png
    通过原理图可以看到,USB接口默认是连接到USB0接口的,可以使用通过跳线和去掉电阻的方式连接到USB1。
    003.png
    通过官网的信息可以得知,芯片的两个USB接口中USB0工作在全速模式,可用作设备模式或主机模式,在设备模式时可以支持无晶振工作,USB1为作为高速控制器,可以用作设备模式和主机模式,这个必须使用外部晶振。接下来我们就以USB0为例来学习如何使用这个全速USB接口。
    004.png
    首先创建工程,在组件Components中选择中间件Middleware标签页,选中USB下的USB Device中的USB Device HID,此时系统会自动选择所依赖的其他组件。
    005.png
    在选中USB PHY中的USB PHY。这样USB所依赖的中间件就选择完成了。之后创建工程。
    006.png
    创建完工程后,source中会有相应的文件产生。此时打开时钟设置。
    007.png
    这里把PLL0和PLL1模式都设置为Normal。PLL0设置为150MHz作为系统主时钟。PLL1设置为96MHz,作为USB的时钟源。在USB0 clock处通过分频使得USB0的时钟设置为48MHz。
    008.png
    继续设hi在引脚,在外设信号中选中USBFSH,其他引脚默认,USB_VBUS路由到PIO1_11这个引脚(本来以为这里是用来设置USB Host的,我用Device的时候不用设置,但是如果这里不设置后面会报错)
    009.png
    在外设中设置USB0,选中后右侧详细信息处设置模式为Device,外设选择USB0,预设选择HID Keyboard,也就是说实现一个标准的HID键盘。其他部分根据需要修改或者保持默认即可。在Supported interfaces下点击加号增加一路支持的界面,同样选择HID,预设为键盘keyboard,其他保持默认即可。
    010.png
    生成代码后会发现source中多了一个文件。就是hid键盘相关代码的实现了。此时编译并下载到开发板,
    011.png
    此时使用USB线连接PC机USB口和开发板的MicroUSB口(白色线所在接口)。
    012.png
    运行程序后,系统会提醒有键盘接入。
    013.png
    系统自动安装驱动程序并设置好后,提醒键盘准备就绪。
    014.gif
    此时把焦点防止到一个有上下滚动条的窗口,窗口会自动上翻一次然后下翻一次进行循环。
    015.png
    此时在设备管理器中可以看到键盘项目中有两个键盘,其中一个键盘的属性值VID为"0x1FC0",PID为"0x00A0",这与在配置外设中USB属性是一致的。

    代码分析:
    030.png
    对于USB全速设备,主机可以保证每1ms一笔事务,一笔事务最大64字节,我们这里设置为8字节(USB键盘需要8字节存放信息,第1字节用来表示特殊键,第二字节保留,第三至第八字节为同时按下的键值)
    031.png
    第一字节的特殊键定义:
    BYTE1 -- 特殊按键
            |--bit0:   Left Control是否按下,按下为1
            |--bit1:   Left Shift  是否按下,按下为1
            |--bit2:   Left Alt    是否按下,按下为1
            |--bit3:   Left GUI(Windows键) 是否按下,按下为1
            |--bit4:   Right Control是否按下,按下为1  
            |--bit5:   Right Shift 是否按下,按下为1
            |--bit6:   Right Alt   是否按下,按下为1
            |--bit7:   Right GUI   是否按下,按下为1
    032.png
    BYTE3-BYTE8 当前按下的普通按键键值,也就是最多六个按键同时按下,其键值代码如上图所示,详细代码可访问usb.org下载或本文附件下载。
    033.png
    返回头我们看看源代码中的实现,回调函数中实现了隔一段时间发送PageUp,然后再隔一段时间发送PageDown,依次循环。两个按键的键值分别为0x4B和0x4E。
    034.png
    在看看键值表中,4B和4E确实是PageUp和PageDown。
    至此,USB例程学习完毕,由于USB通讯相对复杂,更详细的信息还在逐渐学习中。

    附录:用到的相关文档

    1、圈圈教你玩USB(电子精简版) (P386)
    QuanQuanUSB.pdf (15.17 MB, 下载次数: 1)
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-23 15:43 , Processed in 0.122322 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.