usbh_serial_write 向串口写数据。 串口设备如果是 USB2TTL 类型,必须按照波特率发送,否则会丢包
usbh_serial_write 向串口写数据。
int usbh_serial_write(struct usbh_serial *serial, const void *buffer, uint32_t buflen);
usbh_serial_read 从串口读数据。 如果没有设置波特率,不允许使用该 API。
usbh_serial_read 从串口读数据。 **如果没有设置波特率,不允许使用该 API,设置波特率后,内部会开启 rx 接收并将数据写入 ringbuf **。
int usbh_serial_read(struct usbh_serial *serial, void *buffer, uint32_t buflen);
usbh_serial_cdc_read_async 异步从串口读数据。 如果设置了波特率,不允许使用该 API。
usbh_serial_cdc_read_async 异步从串口读数据。 **如果设置了波特率,不允许使用该 API,设置波特率后,内部会开启 rx 接收并将数据写入 ringbuf **。
int usbh_serial_cdc_read_async(struct usbh_serial *serial, uint8_t *buffer, uint32_t buflen, usbh_complete_callback_t complete, void *arg);
Note
+需要注意,例程中使用的是比较简单的先发送后读取的方式,因此发送的总长度不可以超过 CONFIG_USBHOST_SERIAL_RX_SIZE,正常使用 TX/RX 请分开进行。
+用户需要考虑以下三种场景:
USB2TTL 设备 + 启用了波特率,这种情况下需要使用 usbh_serial_write 和 usbh_serial_read 进行收发数据, 并且需要根据波特率控制发送频率,防止对端丢包;
纯 USB 设备 + 未启动波特率,这种情况下可以使用 usbh_serial_cdc_write_async 和 usbh_serial_cdc_read_async 进行异步收发数据,阻塞则用 usbh_serial_write 并且不需要控制发送频率。不可以使用 usbh_serial_read。
纯 USB 设备 + 启动波特率,同 1,但是速率打折扣。不可以使用 usbh_serial_cdc_write_async 和 usbh_serial_cdc_read_async。如果是 GSM 设备需要使用第一种。
USB2TTL 设备 + 启用了波特率,这种情况下需要使用 usbh_serial_write 和 usbh_serial_read 进行收发数据, 并且 read 操作需要及时,防止 ringbuf 数据溢出而丢包;
纯 USB 设备 + 未启动波特率,这种情况下可以使用 usbh_serial_cdc_write_async 和 usbh_serial_cdc_read_async 进行异步收发数据。阻塞则可以用 usbh_serial_write ,不可以使用 usbh_serial_read。
纯 USB 设备 + 启动波特率,同 1,但是速率打折扣(因为多了一层 ringbuf)。此时也不可以使用 usbh_serial_cdc_write_async 和 usbh_serial_cdc_read_async。 如果是 GSM 设备请使用第一种场景。