micropython移植后不识别usb_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-A,Ctrl-B两种特殊字符进行处理。从设计上看,REPL是用户程序的前置过滤功能。否则也无法通过终端来中断用户程序了。

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

使用usb.setinterrupt(-1)关闭REPL字符串过滤功能;

REPL转到其他UART,把USB留给上位机;

采用hex协议或者base64进行传输;

底层补丁,关闭REPL。

我的方式

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值