MicroPython USB REPL复用问题

在最初的MicroPython PYB中,USB CDC是主要的REPL通道,同时也可以作为上位机的通讯通道。而且REPL在用户程序工作的时候是不工作的。但是我今天发现这种方式在PYB接受二进制数据时出现了冲突。

如果开机进入MicroPython REPL,输入help(),会发现以下提示:

Control commands:                                                               
  CTRL-A        -- on a blank line, enter raw REPL mode                         
  CTRL-B        -- on a blank line, enter normal REPL mode                      
  CTRL-C        -- interrupt a running program                                  
  CTRL-D        -- on a blank line, do a soft reset of the board                
  CTRL-E        -- on a blank line, enter paste mode   

这五个指令分别对应于0x01/0x02/0x03/0x04/0x05五种二进制指令。

假设,上位机发送01 FF 02 00给PYB,会被PYB的REPL识别为Ctrl-ACtrl-B两种特殊字符进行处理。从设计上看,REPL是用户程序的前置过滤功能。否则也无法通过终端来中断用户程序了。

所以,PYB输出二进制数据工作正常,但是PC传输给PYB二进制就会面临这个冲突问题。偏偏HCI就是二进制协议。解决方法有:

  • 使用usb.setinterrupt(-1)关闭REPL字符串过滤功能;
  • REPL转到其他UART,把USB留给上位机;
  • 采用hex协议或者base64进行传输;
  • 底层补丁,关闭REPL。

我的方式

因为手头的设计主要是为LoRaWANPktFwd提供一个仿真设备,所以先使用hex协议进行设计,完成后使用UART/REP避免冲突L,并关闭字符串过滤的方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据结构与算法 1.算法的有穷性是指( )。答案:A A)算法程序的运行时间是有限的 B)算法程序所处理的数据量是...
    织梦学生阅读 8,810评论 1 15
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,301评论 19 139
  • 1. 基础知识 1.1、 基本概念、 功能 冯诺伊曼体系结构1、计算机处理的数据和指令一律用二进制数表示2、顺序执...
    yunpiao阅读 10,818评论 1 22
  • 前两天心血来潮网购了一箱近期很火的零卡雪碧。包装上标示着无糖,0能量0脂肪,所有的甜味都来自安塞蜜以及阿斯巴甜这两...
    云下雀阅读 3,851评论 0 2
  • 初春清晨的小雨让人心烦。 “有没有好呐?别磨蹭了行吗?马上就迟到了!等你上小学了,要是迟到就得站在外面!” 妻子的...
    锋镝余生阅读 3,142评论 2 3