RK3588-PCIe

1. 简介

PCIe(Peripheral Component Interconnect Express)是一种用于连接主板和外部设备的高速串行接口标准。它是 PCI 技术的后继者,旨在提供更高的带宽和更好的性能。

  • 高速传输: PCIe接口提供了高速的数据传输通道,可用于连接各种硬件设备,如图形卡、存储设备、网络适配器等。它的速度通常以每秒传输的数据位数(例如PCIe x1、x4、x8、x16等)来表示,每个通道的带宽可以根据需要扩展。
  • 点对点连接: PCIe采用点对点连接的架构,这意味着每个设备都直接连接到主板上的PCIe插槽,而不需要与其他设备共享带宽。这有助于减少延迟并提高性能。
  • 热插拔支持: PCIe接口支持热插拔,允许用户在计算机运行时添加或移除PCIe设备,而不需要重新启动计算机。
  • 广泛应用: PCIe接口广泛用于连接图形卡、固态硬盘(SSD)、扩展卡、网络适配器和其他高性能设备。这使得计算机用户可以根据需要扩展和升级系统的性能和功能。

综上所述,PCIe 是一种高速、灵活且广泛应用的串行接口标准,它在现代计算机系统中发挥着关键作用,为连接各种外部设备提供了可靠的解决方案。

2. RK3588的PCIe控制器

  • RK3588共有5个PCIe的控制器,硬件IP是⼀样的,配置不⼀样,其中⼀个4Lane DM模式可以⽀持作为EP
    使⽤,另外⼀个2Lane和3个1Lane控制器均只能作为RC使⽤。
  • RK3588有两种PCIe PHY,其中⼀种为pcie3.0PHY,含2个Port共4个Lane,另⼀种是pcie2.0的PHY有3
    个,每个都是2.0 1Lane,跟SATA和USB combo使⽤。
  • pcie3.0 PHY的4Lane可以根据实际需求拆分使⽤,拆分后需要合理配置对应的控制器,所有配置在DTS中
    完成,⽆需修改驱动。
    在这里插入图片描述

RK3588 PCIe 的硬件资源及软件上 pcie 控制器节点、 PHY 节点对应关系如图:

在这里插入图片描述

3. RK3588 DTS配置

3.1 ArmSoM-W3上的PCIe接口

  • 这里以ArmSoM-W3开发板为例,讲解RK3588的PCIe配置
  • Armsom-W3开发板上有 1 个 PCIe3.0 x 4 接口和两个PCIe2.0接口,如图:

在这里插入图片描述

3.2 ArmSoM-W3开发板PCie相关的DTS配置:

一般根据原理图在 DTS 中配置PCie的供电引脚、复位引脚,选择正确的 pcie 控制器节点以及 PHY 节点使能。

  • 在kernel/arch/arm64/boot/dts/rockchip/rk3588-armsom-w3.dts中配置如下:

    / {
    	vcc12v_dcin: vcc12v-dcin {
    		compatible = "regulator-fixed";
    		regulator-name = "vcc12v_dcin";
    		regulator-always-on;
    		regulator-boot-on;
    		regulator-min-microvolt = <12000000>;
    		regulator-max-microvolt = <12000000>;
    	};
    
    	vcc5v0_sys: vcc5v0-sys {
    		compatible = "regulator-fixed";
    		regulator-name = "vcc5v0_sys";
    		regulator-always-on;
    		regulator-boot-on;
    		regulator-min-microvolt = <5000000>;
    		regulator-max-microvolt = <5000000>;
    		vin-supply = <&vcc12v_dcin>;
    	};
    
    	vcc3v3_pcie2x1l0: vcc3v3-pcie2x1l0 {
    		compatible = "regulator-fixed";
    		regulator-name = "vcc3v3_pcie2x1l0";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		enable-active-high;
    		regulator-boot-on;
    		regulator-always-on;
    		gpios = <&gpio1 RK_PD2 GPIO_ACTIVE_HIGH>;
    		startup-delay-us = <50000>;
    		vin-supply = <&vcc5v0_sys>;
    	};
    
    	vcc3v3_pcie2x1l2: vcc3v3-pcie2x1l2 {
    		compatible = "regulator-fixed";
    		regulator-name = "vcc3v3_pcie2x1l2";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		startup-delay-us = <5000>;
    		vin-supply = <&vcc_3v3_s3>;
    	};
    
    	vcc3v3_pcie30: vcc3v3-pcie30 {
    		compatible = "regulator-fixed";
    		regulator-name = "vcc3v3_pcie30";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		enable-active-high;
    		gpios = <&gpio1 RK_PA4 GPIO_ACTIVE_HIGH>;
    		startup-delay-us = <5000>;
    		vin-supply = <&vcc5v0_sys>;
    	};
    }
    
    &pcie2x1l0 {
    	reset-gpios = <&gpio4 RK_PA5 GPIO_ACTIVE_HIGH>;
    	vpcie3v3-supply = <&vcc3v3_pcie2x1l0>;
    	status = "okay";
    };
    
    &pcie2x1l2 {
    	reset-gpios = <&gpio3 RK_PB0 GPIO_ACTIVE_HIGH>;
    	vpcie3v3-supply = <&vcc3v3_pcie2x1l2>;
    	status = "okay";
    };
    
    &combphy1_ps {
    	status = "okay";
    };
    
    &pcie30phy {
    	rockchip,pcie30-phymode = <PHY_MODE_PCIE_AGGREGATION>;
    	status = "okay";
    };
    
    &pcie3x4 {
    	reset-gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>;
    	vpcie3v3-supply = <&vcc3v3_pcie30>;
    	status = "okay";
    };
    
  • pcie30phy、combphy1_ps:PHY 节点

  • pcie3x4、pcie2x1l0、 pcie2x1l2 :pcie控制器节点

  • reset-gpios:复位引脚属性

  • vcc3v3_pcie2x1l0、vcc3v3_pcie2x1l2、vcc3v3_pcie30:供电引脚节点

4. PCIe设备使用方法

执行lspci命令会列出所有PCI设备的信息,包括设备的制造商、型号、PCI地址等。输出通常以文本形式提供,并按总线地址(BDF:Bus, Device, Function)的顺序排列。

armsom@armsom:~$ lspci
0000:00:00.0 PCI bridge: Rockchip Electronics Co., Ltd Device 3588 (rev 01)
0000:01:00.0 Non-Volatile memory controller: Intel Corporation NVMe Optane Memory Series
0002:20:00.0 PCI bridge: Rockchip Electronics Co., Ltd Device 3588 (rev 01)
0002:21:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
0003:30:00.0 PCI bridge: Rockchip Electronics Co., Ltd Device 3588 (rev 01)
0003:31:00.0 Network controller: Broadcom Inc. and subsidiaries Device 449d (rev 02)
0004:40:00.0 PCI bridge: Rockchip Electronics Co., Ltd Device 3588 (rev 01)
0004:41:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)

pcie接口接高速固态硬盘(SSD)的情景较多,这里以Intel Corporation生产的非易失性内存(NVMe)控制器为例,详解NVMe控制器的使用方法。

4.1 NVMe控制器使用

  1. 检查NVMe设备是否被识别:
  • 运行以下命令,查看系统是否正确识别了NVMe设备

    armsom@armsom:/$  lspci | grep NVMe
    0000:01:00.0 Non-Volatile memory controller: Intel Corporation NVMe Optane Memory Series
    

    如果您看到与Intel Corporation相关的NVMe设备信息,则表示设备已经被识别。

  1. 查找设备节点

    ls /dev/nvme*
    /dev/nvme0  /dev/nvme0n1
    
  2. 查看设备的分区信息:

    armsom@armsom:/$ lsblk
    NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
    mmcblk0      179:0    0 58.3G  0 disk
    ├─mmcblk0p1  179:1    0    4M  0 part
    ├─mmcblk0p2  179:2    0    4M  0 part
    ├─mmcblk0p3  179:3    0   64M  0 part
    ├─mmcblk0p4  179:4    0  128M  0 part
    ├─mmcblk0p5  179:5    0   32M  0 part
    ├─mmcblk0p6  179:6    0   14G  0 part
    ├─mmcblk0p7  179:7    0  128M  0 part
    └─mmcblk0p8  179:8    0 43.9G  0 part
    mmcblk0boot0 179:32   0    4M  1 disk
    mmcblk0boot1 179:64   0    4M  1 disk
    mmcblk1      179:96   0 29.7G  0 disk
    ├─mmcblk1p1  179:97   0  512M  0 part /boot/firmware
    └─mmcblk1p2  179:98   0 29.2G  0 part /
    nvme0n1      259:0    0 13.4G  0 disk /mnt
    

    NVMe设备通常以/dev/nvmeXnY的形式表示,其中X是NVMe设备的编号,Y是分区编号。此处的NVMe设备名称是nvme0n1。

  3. 格式化为EXT4文件格式 ( 根据个人需求运行格式化操作 )

    sudo mkfs.ext4 /dev/nvme0n1
    
  4. 挂载设备

    armsom@armsom:~$ sudo mount /dev/nvme0n1 /mnt
    
  5. 查看挂载路径

    df -h
    /dev/nvme0n1     14G   24K   13G   1% /mnt
    

    或者

    cat /proc/mounts  | grep nvme
    /dev/nvme0n1 /mnt ext4 rw,relatime 0 0
    
  6. 卸载设备

    umount /mnt
    

4.2 读写测速

使用dd命令进行读写测试:

  • 写测试命令:

    sudo dd if=/dev/zero of=/dev/nvme0n1 bs=1M count=1000
    

    其中if参数是输入文件(通常是/dev/zero,用于写入测试),of参数是输出文件(通常是您的NVMe设备),bs参数是块大小,count参数是要执行的块数

  • 读测试命令:

    sudo dd if=/dev/nvme0n1 of=/dev/null bs=1M count=1000
    

    读写性能可能会受到多种因素的影响,包括设备型号、硬件配置和测试条件等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/449436.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AHU 汇编 实验四

实验名称&#xff1a;实验四 两个数的相乘 实验内容&#xff1a; 用子程序形式编写&#xff1a; A*B&#xff1a;从键盘输入a和b&#xff0c;计算A*B&#xff0c;其中乘法采用移位和累加完成 实验过程&#xff1a; 源代码&#xff1a; data segmentmul1 db 16,?,16 dup(?…

Jenkins cron定时构建触发器

from&#xff1a; https://www.jenkins.io/doc/book/pipeline/syntax/#cron-syntax 以下内容为根据Jenkins官方文档cron表达式部分翻译过来&#xff0c;使用机翻加个人理解补充内容&#xff0c;包括举例。 目录 介绍举例&#xff1a;设置方法方法一&#xff1a;方法二&#xf…

web | http 的一些问题 | get/post的区别 | http版本 | http与https的区别 | session、cookie、token

怎么来说呢&#xff1f;这应该算一个大类了&#xff0c;基本上设计网络的应用层 当然重要的是从网络层----->应用层 &#xff08;杠精勿杠&#xff0c;知道中间还有其他层&#xff09; 先来讲一下http的结构 都知道http 有三部分&#xff0c;头部、请求头和body 头部&#x…

SQLiteC/C++接口简介

上一篇&#xff1a;SQLite——世界上部署最广泛的开源数据库&#xff08;简介&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍&#xff08;一&#xff09; 引言&#xff1a; 作为一种轻量级、嵌入式关系型数据库&#xff0c;SQLite已经成为许多应用和系统的首选解决方…

Discord OAuth2授权以及机器人监听群事件

下面文章讲解获取OAuth2授权整个流程&#xff0c;创建机器人&#xff0c;使用机器人监听工会&#xff08;工会就是创建的服务器&#xff09;成员变化等等&#xff0c;对接国外的都是需要VPN的哦&#xff0c;对接的时候记得提前准备。 创建应用 点击 此页面添加应用,&#xff…

使用kettle批量加载数据到kadb

测试环境 达梦数据库版本&#xff1a;DM Database Server 64 V8 03134284132-20240115-215128-20081&#xff08;官网测试版&#xff09;KADB版本&#xff1a;KADB V003R002C001B0181Kettle版本&#xff1a;pdi-ce-9.4.0.0-343&#xff08;官网下载&#xff09;Python版本&…

解释“RNN encode-decode”

“RNN encode-decode” 涉及使用循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;来执行编码和解码操作。这种结构常用于处理序列数据&#xff0c;例如自然语言处理、语音识别和时间序列预测等任务。 以下是 “RNN encode-decode” 的一般概念&a…

Flink实操:Flink SQL实现SFTP文件读写操作

一、背景 公司需要将Doris数据库中的部分表数据同步至SFTP服务器&#xff0c;以供其他合作企业安全读取和使用。目前&#xff0c;平台数据同步功能统一使用Flink引擎进行实时同步、离线同步的工作。因此&#xff0c;希望能够充分利用现有的Flink引擎&#xff0c;并将其复用于这…

四 超级数据查看器 讲解稿 列表功能1

四 超级数据查看器 讲解稿 列表功能1 点击此处 以新页面 打开B站 播放教学视频 APP下载地址 百度手机助手 下载地址4 讲解稿全文&#xff1a; 大家好&#xff0c;今天我们讲解一下&#xff0c;超级数据查看器列表界面&#xff0c;分为1-2两集。 首先&#xff0c…

ChatGPT+MATLAB应用

MatGPT是一个由chatGPT类支持的MATLAB应用程序&#xff0c;由官方Toshiaki Takeuchi开发&#xff0c;允许您轻松访问OpenAI提供的chatGPT API。作为官方发布的内容&#xff0c;可靠性较高&#xff0c;而且也是完全免费开源的&#xff0c;全程自己配置&#xff0c;无需注册码或用…

MySQL的加锁规则

学习了MySQL的锁后&#xff0c;知道其有这么多锁&#xff0c;那应该会有些疑惑&#xff0c;这么多锁&#xff0c;究竟我在写sql语句时候用到哪个锁的&#xff0c;什么情况是用什么锁的&#xff1f;在哪里查看该sql语句是用了哪些锁的呢&#xff1f;加锁的规则是什么呢&#xff…

【C++初阶】第六站 : 模板初阶

前言&#xff1a; 本章知识点&#xff1a;泛型编程、函数模板、类模板 专栏&#xff1a; C初阶 目录 泛型编程 函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 4.函数模板的实例化 5.模板参数的匹配原则 类模板 类模板的定义格式 类模板的实例化 泛型编程 如何实现一…

Redis 的基本全局命令

前言 Redis 常用的有 5 种数据结构&#xff0c;字符串&#xff0c;列表&#xff0c;哈希表&#xff0c;集合&#xff0c;有序集合&#xff0c;每一种数据结构都有自己独特的命令&#xff0c;但也有些通用的全局命令&#xff0c;本文所提到的是最基本的命令&#xff0c;Redis 的…

linux查看文件内容cat,less,vi,vim

学习记录 目录 catlessvi vim cat 输出 FILE 文件的全部内容 $ cat [OPTION] FILE示例 输出 file.txt 的全部内容 $ cat file.txt查看 file1.txt 与 file2.txt 连接后的内容 $ cat file1.txt file2.txt为什么名字叫 cat&#xff1f; 当然和猫咪没有关系。 cat 这里是 co…

使用 IDEA 将本地jar上传到本地maven仓库

IDEA中的操作步骤 创建一个 Maven 运行配置 在开发工具的导航栏中&#xff0c;点击选择配置&#xff1a; 在配置界面点击左上角的加号&#xff0c;随后选择增加一个maven运行配置&#xff1a; 编辑 Maven 配置 上图中的含义&#xff1a; Name 对应的是本配置的名字、用处或功…

PyTorch搭建AlexNet训练集

本次项目是使用AlexNet实现5种花类的识别。 训练集搭建与LeNet大致代码差不多&#xff0c;但是也有许多新的内容和知识点。 1.导包&#xff0c;不必多说。 import torch import torch.nn as nn from torchvision import transforms, datasets, utils import matplotlib as p…

NFTScan | 03.04~03.10 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.03.04~ 2024.03.10 NFT Hot News 01/ 数据&#xff1a;比特币链上 NFT 过去 24 小时销售额超 3100 万美元 3 月 4 日&#xff0c;据数据显示&#xff0c;比特币链上 NFT 过去 24 小…

设计模式十:原型模式

文章目录 1、原型模式1.1 类创建过程1.2 浅拷贝1.3 深拷贝 2、示例2.1 简单形式2.2 复杂形式 3、spring中的原型模式3.1 ArrayList的原型模式3.2 spring中的原型模式 1、原型模式 原型模式就是从一个对象再创建另外一个可定制的对象&#xff0c; 而且不需要知道任何创建的细节。…

Vscode+QT+Python

参考链接&#xff1a;VSCodePyQt之Python界面编写_vscode编写图形化界面-CSDN博客 1.安装库 pip install PyQt5 pip install PyQt5-tools pip install qt5_applications 2.在VSCode里下载并安装PYQT Integration 3.配置pyqt integration 4.打开qt designer 在工程文件的空白…