| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 网络协议 -> USB IP核FPGA调试(三) -> 正文阅读 |
|
|
[网络协议]USB IP核FPGA调试(三) |
|
硬件修复上节提到的单字节读写问题后,就可以继续往下跑了。 我们需要把usb设备枚举成一个rndis设备,基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。 现在的几个buffer是这样分配的: 1.控制传输的setup transaction部分,其中的data放在g_ep0_setup_pkt(0x22000) 2.控制传输如果是标准控制传输,其中的data transaction部分,放在g_ep0_status_buf(0x23000),所以,这个g_ep0_status_buf可能是输入也可能是输出 3.控制传输如果是class控制传输,其中的data transaction部分,放在encapsulated_buffer(0x25000) 4.中断传输现在就是8个字节,放在notify_data(0x24000) 5.encapsulated_buffer和g_ep0_status_buf放在一个地址会不会产生问题,需要做个实验验证一下。想像中应该会有问题,就是如果标准控制传输和class控制传输混杂在一起的情况,那么该buffer有时候会不会不知道该给哪个控制传输准备了呢? 在代码dwc_usb3_do_setup函数中添加class control transfer的处理:
否则在收到class 类控制传输的setup包时,不会准备好接收或者发送接下来的data段的。 发送的数据会在接收到rndis命令的时候准备好,具体来说 在dwc_usb3_handle_ep0函数的EP0_OUT_DATA_PHASE分支下面,由rndis_ep0_recv函数完成。
这么操作之后,整个rndis的枚举就能顺利跑完了。 接下来把我们的板子连接到电脑,电脑会试图往外发网络包:
?上图是wireshark在电脑端抓包的数据,把bulk端口的数据给过滤出来,可以看到只有电脑往外在发数据,这是因为我们现在fpga还没有支持eth模块,等到eth模块添加之后,连上网线,我们就可以测试网路通信了。 |
|
|
| 网络协议 最新文章 |
| 使用Easyswoole 搭建简单的Websoket服务 |
| 常见的数据通信方式有哪些? |
| Openssl 1024bit RSA算法---公私钥获取和处 |
| HTTPS协议的密钥交换流程 |
| 《小白WEB安全入门》03. 漏洞篇 |
| HttpRunner4.x 安装与使用 |
| 2021-07-04 |
| 手写RPC学习笔记 |
| K8S高可用版本部署 |
| mySQL计算IP地址范围 |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/28 5:06:43- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |