【正點原子Linux連載】 第四十六章 M.2硬盤驅動實驗摘自【正點原子】ATK-DLRK3568嵌入式Linux驅動開發指南

1)實驗平臺:正點原子ATK-DLRK3568開發板
2)平臺購買地址:https://detail.tmall.com/item.htm?id=731866264428
3)全套實驗源碼+手冊+視頻下載地址: http://www.openedv.com/docs/boards/xiaoxitongban

第四十六章 M.2硬盤驅動實驗

M.2 硬盤,也被稱為 M.2 SSD(Solid-State Drive),是一種高性能的存儲設備,它采用 M.2 接口標準連接到計算機的主板上。M.2 硬盤具有許多優點,包括高速讀寫性能、小型尺寸、低功耗和可靠性。現在的計算機普通都有M.2接口,一般使用的協議都是PCIe。有的支持PCIe 2.0、PCIe 3.0甚至PCIe 4.0。PCIe 3.0 相對于 PCIe 2.0 提供了更高的帶寬和性能,適用于需要高速數據傳輸的應用,如圖形卡和高性能存儲。ATK-DLRK3568底板有一路M.2接口使用的是PCIe 3.0總線,支持PCIe 3.0,本章我們來使用PCIe3.0驅動M.2硬盤。

46.1 M.2接口簡介
M.2 接口是一種物理接口標準,它可以支持多種不同的通信協議,包括 PCIe(Peripheral Component Interconnect Express)、SATA(Serial Advanced Technology Attachment)、USB(Universal Serial Bus)等。因此,M.2 接口的速度和性能取決于所使用的通信協議和硬件實現。M.2 接口可以支持 PCIe 3.0,這是一種高速的數據傳輸協議,通常用于連接圖形卡、固態硬盤(SSD)以及其他需要高帶寬的設備。
M.2 插槽有不同的物理尺寸,包括 2242、2260、2280 和 22110 等。這些數字表示了插槽的長度和寬度。不同尺寸的插槽可容納不同尺寸的 M.2 模塊,以適應各種設備。正點原子的ATK-DLRK3

568開發板接口采用的是2280規格,詳細請參考07、硬件資料05、板載連接器規格參考15、M.2座子下的文檔說明。
ATK-DLRK3568底板M.2接口如下圖圖46.1.1,支持PCIe3.0。注意,5G模塊接口也是用的M.2接口使用的是USB協議,兩個座子的規格一樣。
在這里插入圖片描述

圖46.1.1 M.2座子
46.2 RK3568 PCIE3.0簡介
RK3568芯片擁有一個PCIe3.0 x2 Lane Dual Mode控制器,一個PCIe3.0 x1 Lane RC Mode控制器,一個PCIe3.0 x2 Lane PHY。PCIe3.0 x2 Lane Dual Mode控制器和PCIe3.0 x1 Lane RC Mode控制器都連接到PCIe3.0 x2 Lane PHY。連接示意圖如下圖46.2.1。
在這里插入圖片描述

圖46.2.1 PCIe3.0控制器/PCIe3.0 PHY框圖
由上可知,兩個控制器連接同一個PHY,這里我們先了解一下,因為后面設備樹會用這部分知識。
46.3 硬件原理圖
原理圖如下圖46.3.1,與SATA硬盤驅動實驗章節一樣,PCIE也屬于專用IO,只需要啟用對應的控制器,IO會復用成相應模式。下圖我們只需要配置PCIE30X2全局復位IO即可。可以看到復位IO是GPIO2_PD6。
在這里插入圖片描述

圖46.3.1底板M.2硬盤接口原理圖
46.4實驗程序編寫
46.4.1 修改設備樹
前面說過PCIe所用的引腳屬于專用引腳,只需要啟用對應的控制器,對應的引腳將被設置成對應的模式。如PCIE30X2_WAKEn_M1(喚醒輸入)引腳,參考08、RK官方文檔01、LinuxRK356XDatasheet Rockchip_RK3568_Datasheet_V1.1-20210305.pdf可知這個引腳可以復用為LCDC_D5/VOP_BT656_D5_M0/SPI2_CS0_M1/PCIE30X2_WAKEn_M1/I2S1_SDI2_M2/GPIO2_D5_d模式。在設備樹里我們啟用pcie3x2及pcie30phy控制器節點,查看rk3568-atk-evb1-ddr4-v10.dtsi,可以看到以下內容:
示例代碼46.4.1 啟用pcie30py控制器和pcie3x2節點
738 &pcie30phy {

739         status = "okay";740 };741 742 &pcie3x2 {743         //pinctrl-names = "default";744         //pinctrl-0 = <&pcie30x2m1_pins>;745         reset-gpios = <&gpio2 RK_PD6 GPIO_ACTIVE_HIGH>;746         vpcie3v3-supply = <&vcc3v3_pcie>;747         status = "okay";748 };
746~744,看到pinmux被注釋,我們不用配置,啟用對應的控制器即可。

第746行,reset-gpios的管腳為GPIO2_D6。
再打開rk3568.dtsi查看如下內容。
示例代碼46.4.2 兩控制器連接到一個PHY
1 pcie3x1: pcie@fe270000 {
2 compatible = “rockchip,rk3568-pcie”, “snps,dw-pcie”;
3 #address-cells = <3>;
4 #size-cells = <2>;
5 bus-range = <0x10 0x1f>;

29 msi-map = <0x1000 &its 0x1000 0x1000>;
30 num-lanes = <1>;
31 phys = <&pcie30phy>;
32 phy-names = “pcie-phy”;
33 power-domains = <&power RK3568_PD_PIPE>;

53 };
54
55 pcie3x2: pcie@fe280000 {
56 compatible = “rockchip,rk3568-pcie”, “snps,dw-pcie”;
57 #address-cells = <3>;
58 #size-cells = <2>;
59 bus-range = <0x20 0x2f>;

83 msi-map = <0x2000 &its 0x2000 0x1000>;
84 num-lanes = <2>;
85 phys = <&pcie30phy>;
86 phy-names = “pcie-phy”;

94 reg-names = “pcie-dbi”, “pcie-apb”;
95 resets = <&cru SRST_PCIE30X2_POWERUP>;
96 reset-names = “pipe”;
97 /* rockchip,bifurcation; lane0 when using 1+1 /
98 status = “disabled”;
99

107 };
第31和85行可知pcie3x1和pcie3x2連接到同一個pcie30phy,正點原子ATK-DLRK3568M.2接口使用的是2通道的PCIE接口,也就是pcie3x2。
46.4.2 運行測試
ATK-DLRK3568 linux默認就支持M.2接口硬盤。無需我們重新修改設備樹。直接在出廠的Linux buildroot系統上測試M.2硬盤是否支持。
測試方法與45.3.2一樣,只是M.2硬盤設備節點變成了/dev/nvme0n1p
。這里我們就不重復寫測試方法了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15054.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15054.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15054.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【selenium】自動化測試chrome webdriver驅動下載網址,V123版本以上

Hi&#xff0c;大家好&#xff0c;今天和大家分享下最新的selenium自動化測試&#xff0c;chrome瀏覽器驅動下載的最新地址 chrome webdriver下載網址&#xff0c;適用于瀏覽器版本V123以上

結構型模式 (Python版)

代理模式 from abc import ABC, abstractmethod# 買的行為&#xff08;抽象類&#xff09; class Buy(ABC):abstractmethoddef buy_ticket(self):pass# 男人&#xff08;具體類&#xff09; class Man(Buy):# 男人買票def buy_ticket(self):print("Man 買票成功&#xff…

【輸入示例100,999 輸出示例4】水仙花數

// “水仙花數”是指一個三位正整數&#xff0c;其各位上的數字的立方和等于該數本身。如:1^35^33^3153&#xff0c;因此153是一個水仙花數。輸入兩個三位正整數a和b(其中a<b)&#xff0c;求[a,b]范圍內水仙花數的個數。 //輸入示例100,999 //輸出示例4 #include <stdio.…

AI爆文寫作:如果你有一篇文章爆了,正確的做法是:自己抄襲自己,重復發,還可以繼續爆!

爆款總是相似的&#xff0c;如果你有一篇文章爆了&#xff0c;正確的做法&#xff0c;就是重復發&#xff0c;讓它繼續爆下去。 以前我在小紅書看到一個人&#xff0c;將一篇自己火的筆記&#xff0c;連續發了5次&#xff0c;每次點贊數據都不錯。 公眾號文章也是一樣的。 我…

Gin與OpenAPI(Swagger)的使用

一、背景 1、swagger與openapi Swagger&#xff1a; 一種用于描述RESTFUL API的規范&#xff0c;它提供了一種簡單的來描述API的請求和相應參數、錯誤碼、返回數據類型等信息&#xff0c;是開發者可以方便了解API使用方式。 官網: https://swagger.io/ OpenAPI : 始于 …

gazebo仿真不起飛——QGC地面站查看下是否參數正確

檢查方法&#xff1a;打開QGC地面站查看是否能夠切入定點模式&#xff0c;不能的話查看定位數據來源參數

uniapp(微信小程序)退出小程序方法

一、描述 場景是&#xff1a;當用戶不予授權的時候&#xff0c;不允許使用該小程序&#xff0c;在用戶點擊取消之后&#xff0c;應該關閉當前小程序&#xff0c;不讓他繼續使用。 二、代碼 uni.exitMiniProgram({success: function() {console.log(退出小程序成功);},fail: …

鴻蒙HarmonyOS實戰-Stage模型(信息傳遞載體Want)

&#x1f680;前言 應用中的信息傳遞是為了實現各種功能和交互。信息傳遞可以幫助用戶和應用之間進行有效的溝通和交流。通過信息傳遞&#xff0c;應用可以向用戶傳遞重要的消息、通知和提示&#xff0c;以提供及時的反饋和指導。同時&#xff0c;用戶也可以通過信息傳遞向應用…

FPGA 第4章 攝像頭Bayer轉rgb

參考文獻 彩色MT9V034攝像頭 Bayer轉rgb FPGA實現 https://www.cnblogs.com/hqz68/p/10413896.html 文章目錄 前言Bayer轉rgb算法解析 總結 前言 Bayer格式是相機內部的原始數據, 一般后綴名為.raw。 對于彩色圖像,一般是三原色數據&#xff0c;rgb格式。但是攝像頭一個像素…

【linux-IMX6ULL-LED字符驅動框架完善】

目錄 1.簡介&#xff12;.前置知識2.1 重要函數及結構體2.2 程序框架流程 3. 代碼詳解&#xff1a; 1.簡介 在上節&#xff0c;我對linux-IMX6ULL-字符設備驅動簡單框架實驗進行了說明和構建&#xff0c;但是也存在幾個問題&#xff1b; 需要手動指定設備號&#xff0c;不能自…

TCP 與 UDP

0. tcp 與 udp 的 異同特性 TCPUDPname傳輸控制協議用戶數據報協議面向連接&#xff1f; 需要 傳輸數據前建立連接傳輸完畢后斷開連接不需要可靠的傳輸數據&#xff1f; 可靠 有確認機制&#xff08;三次握手&#xff09; 有確認、窗口、重傳、擁塞控制的機制保證數據可靠傳輸…

itertools拼裝迭代器

itertools拼裝迭代器 連接多個迭代器 內置的itertools模塊有一些函數可以把多個迭代器連城一個使用。 chain chain可以把多個迭代器從頭到尾連成一個迭代器。 import itertoolsit itertools.chain([1, 2, 3], [4, 5, 6]) print(list(it))>>> [1, 2, 3, 4, 5, 6]…

操作視頻號小店,新手最關心的問題,一篇給你講解清楚!

大家好&#xff0c;我是電商小V 新手去做視頻號小店的時候&#xff0c;心里面一定是有很多疑問的&#xff0c;會反復咨詢一些最關心的問題&#xff0c;因為他們要做好準備&#xff0c;以防后續做店過程中出現問題&#xff0c;其實新手關心的問題就那幾個&#xff0c;咱們今天就…

C++貪心算法3

過河的最短時間 #include<bits/stdc.h> using namespace std; void f(int); int n; int main() {system("color 1");cin>>n;int a[10010];for(int i0;i<n;i){cin>>a[i];}sort(a0,an);int ta[1];int k1n-2;int k2n-1;while(true){int t1a[0]a[k…

springboot2+mybatis-plus+vue3創建入門小項目[學生管理系統]02[實戰篇]

創建一個 vue 項目 創建這個新的文件夾 創建前端項目 eggbox 數據庫 SQL CREATE DATABASE IF NOT EXISTS egg DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; USE egg;CREATE TABLE stu (id INT AUTO_INCREMENT, -- 自增主鍵name VARCHAR(64) NOT NULL, -- 非空姓名字段&a…

前端傳參的三種方式

1、params 傳參 參數拼接在地址 url 的后面給后臺&#xff1b;地址欄中可見 案例1 地址欄&#xff1a;https://xxxxxxxx/admin/clues/detail?id558 接口代碼&#xff1a; export function getClueDetail(query: any) {return request<clueItem>({url: /clues/detai…

Java:圖書管理系統

目錄 一.book 1.在book包中的Book 類用來定義和引用書的名字&#xff0c;作者&#xff0c;價格&#xff0c;類型等。 2.在book包中的第二個類是BookList是用來構建書架&#xff0c;和書架上的初始書本&#xff0c; 二、ioperations 1.AddOperation (增加圖書) 2.BorrowOp…

保研機試算法訓練個人記錄筆記(七)

輸入格式&#xff1a; 在第1 行給出不超過10^5 的正整數N, 即參賽&#xff5d;人數。隨后N 行&#xff0c;每行給出一位參賽者的 信息和成績&#xff0c;包括其所代表的學校的編號&#xff08;從1 開始連續編號&#xff09;及其比賽成績&#xff08;百分制&#xff09;&#xf…

Linux環境基礎開發工具的使用(yum,vim,gcc/g++,make/Makefile,gdb)

Linux 軟件包管理器-yum 什么是軟件包及安裝方式 在Linux下安裝軟件, 一個通常的辦法是下載到程序的源代碼, 并進行編譯, 得到可執行程序。 但是這樣太麻煩了, 于是有些人把一些常用的軟件提前編譯好, 做成軟件包(可以理解成windows上的安裝程序)放在一個服務器上, 通過包管理…

數據結構——棧(詳細分析)

目錄 &#x1f349;引言 &#x1f349;棧的本質和特點 &#x1f348;棧的基本操作 &#x1f348;棧的特點 &#x1f34d;后進先出 &#x1f34d;操作受限 &#x1f34d;動態調整 &#x1f348;棧的優缺點 &#x1f34d;優點 &#x1f34d;缺點 &#x1f349;棧的應用…