当前位置: 首页 > news >正文

USB学习【6】USB传输错误的处理

1.前言

我们从物理层到信号层,到协议层,他们分别在不同的层面完成不同的功能。
总结一下:
物理层实现了高低电平的检测。
信号层更进一步,通过一些方法,实现了二进制的传输。
协议层,因为可以二进制传输了,就自然可以实现一些协议方面的事情了。
但是我们会发现,信号层可能会发生异常,比如干扰导致信号错误,我们通过技术手段可以检测出来,但是应该怎么处理呢?
协议层也会出现异常,比如我数据包发过去了,对方没有空接收等等,那又应该怎么处理呢?

PID和CRC校验异常

在信号传输层,也只能出现这两种错误,协议规定怎么处理呢?
PID错误​:静默丢弃,依赖超时重传;
​CRC错误​:按传输类型选择重传或丢弃;
说人话就是,接收端发现错误,直接忽视即可!

协议层异常

协议层的异常,一部分是因为信号传输层的数据错误忽视掉引起的,一部分是设备端的状态引起的,
比如上面讲的PID和CRC校验错误,主机发送给设备,主机发现发送了没反应,大概率是传输出问题了,我等等看,重发一下,重复几次发现还是不行,可能你的U盘就提示传输错误了。
如果设备发送给主机握手包发生校验错误,主机直接忽略,当做没有。
总结一下:我们在协议层的角度来看,我们发出去的数据是有可能丢失的,我们接收到的数据也有一些是垃圾数据,主机的策略是,只要我发出的数据没有有效回复,我就重新发送,错误的东西直接忽略(当然和各种传输方式有关系,就看有没有握手包了)
站在设备端的角度来看更简单了,收到有效数据我回复,没有效扔到。
这个逻辑就非常简单了,主机完全占据主动,设备配合就好了,跟着主机的节奏来。

相关文章:

  • 基于去中心化与AI智能服务的web3钱包的应用开发的背景描述
  • 湖北理元理律师事务所债务优化体系拆解:科学规划如何实现“还款不降质”
  • [ERTS2012] 航天器星载软件形式化模型驱动研发 —— 对 Scade 语言本身的影响
  • 使用 Java 反射动态加载和操作类
  • 【前端】【HTML】【总复习】一万六千字详解HTML 知识体系
  • 事务(理解)与数据库连接池
  • 【AI论文】作为评判者的感知代理:评估大型语言模型中的高阶社会认知
  • 【Java学习笔记】instanceof操作符
  • Quantum convolutional nerual network
  • Web开发—Vue工程化
  • stm32实战项目:无刷驱动
  • 期刊 | 《电讯技术》
  • 信息安全管理与评估索引
  • C++中什么是函数指针?
  • 嵌入式STM32学习——振动传感器
  • fast-livo2原理
  • 匈牙利算法
  • all-in-one方式安装kubersphere时报端口连接失败
  • 软件设计师-错题笔记-软件工程基础知识
  • Bash 字符串语法糖详解
  • 独行侠以1.8%概率获得状元签,NBA原来真的有剧本?
  • 超新星|18岁冲击中超金靴,王钰栋的未来无限可能
  • 中美是否计划讨论美方以芬太尼为由对华征收的特别关税?外交部回应
  • 哈马斯表示已释放一名美以双重国籍被扣押人员
  • 上海现有超12.3万名注册护士,本科及以上学历占一半
  • 菲律宾举行中期选举