TWI730454B - 主機輸出入命令的執行裝置及方法及電腦程式產品 - Google Patents
主機輸出入命令的執行裝置及方法及電腦程式產品 Download PDFInfo
- Publication number
- TWI730454B TWI730454B TW108137240A TW108137240A TWI730454B TW I730454 B TWI730454 B TW I730454B TW 108137240 A TW108137240 A TW 108137240A TW 108137240 A TW108137240 A TW 108137240A TW I730454 B TWI730454 B TW I730454B
- Authority
- TW
- Taiwan
- Prior art keywords
- command
- host
- user data
- read
- write
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
- G06F12/0835—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means for main memory peripheral accesses (e.g. I/O or DMA)
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1694—Configuration of memory controller to different memory types
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7205—Cleaning, compaction, garbage collection, erase control
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7208—Multiple device management, e.g. distributing data over multiple flash devices
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Information Transfer Systems (AREA)
- Computer And Data Communications (AREA)
- Communication Control (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Bus Control (AREA)
Abstract
本發明提出一種主機輸出入命令的執行方法,由裝置端的處理單元執行,包含:為反應多種類型的主機輸出入命令,使用通用架構的多個階段來驅動前端介面進行與主機端間的交互,用於傳送從儲存單元讀取的使用者資料給主機端,以及從主機端接收即將寫入儲存單元的使用者資料。通過通用架構的多個階段來反應多種類型的主機輸出入命令,可避免使用多套不同的韌體來分別對應一種主機輸出入命令所造成的維護不易及耗費較大非揮發儲存空間等問題。
Description
本發明涉及儲存裝置,尤指一種主機輸出入命令的執行裝置及方法及電腦程式產品。
閃存通常分為NOR閃存與NAND閃存。NOR閃存為隨機存取裝置,中央處理器(Host)可於位址腳位上提供任何存取NOR閃存的位址,並及時地從NOR閃存的資料腳位上獲得儲存於該位址上的資料。相反地,NAND閃存並非隨機存取,而是序列存取。NAND閃存無法像NOR閃存一樣,可以存取任何隨機位址,中央處理器反而需要寫入序列的位元組(Bytes)的值到NAND閃存中,用於定義請求命令(Command)的類型(如,讀取、寫入、抹除等),以及用在此命令上的位址。位址可指向一個頁面(閃存中寫入作業的最小資料塊)或一個區塊(閃存中抹除作業的最小資料塊)。
於嵌入式多媒體卡(Embedded Multi-Media Card e.MMC)5.1標準中,主裝置可為了不同的應用需求發出不同類型的主機輸出入命令(Host Input-Output IO Commands)給儲存裝置,例如簡單讀/寫命令(Simple Read/Write Command)、包裹讀/寫命令(Packed Read/Write Command)、命令佇列(Command Queue)等,用於請求儲存裝置讀取/寫入資料。然而,主裝置及儲存裝置需要使用不同的協定來交換不同類型的主機命令、即將寫入儲存裝置的資料、從儲存裝置讀取的資料等。傳統上,儲存裝置實作不同的韌體模組於
不同的協定下進行與主裝置間的命令、位址及資料傳遞。然而,要維護處理不同協定的韌體模組並不容易。因此,本發明提出一種使用單一韌體模組來執行主機輸出入命令的裝置及方法及電腦程式產品。
有鑑於此,如何減輕或消除上述相關領域的缺失,實為有待解決的問題。
本發明提出一種主機輸出入命令的執行方法,由裝置端中的處理單元執行,包含:為反應多種類型的主機輸出入命令,使用通用架構的多個階段來驅動前端介面進行與主機端間的交互,用於傳送從儲存單元讀取的使用者資料給主機端,以及從主機端接收即將寫入儲存單元的使用者資料。
本發明另提出一種電腦程式產品,用於主機輸出入命令的執行,包含由裝置端的處理單元載入並執行時實施如上所述方法的程式碼。
本發明另提出一種主機輸出入命令的執行裝置,包含前端介面及處理單元。處理單元用以於載入並執行如上所述程式碼時實行如上所述的方法。
上述實施例的優點之一,通過通用架構的多個階段來反應多種類型的主機輸出入命令,可避免使用多套不同的韌體來分別對應一種主機輸出入命令所造成的維護不易及耗費較大非揮發儲存空間等問題。
本發明的其他優點將搭配以下的說明和圖式進行更詳細的解說。
100:電子裝置
110:主機端
111、131:處理單元
113、135:隨機存取記憶體
115、137、139、151:介面
130:控制器
132:通訊協定傳輸層
133:韌體轉譯層
134:控制器層
136:硬體引擎
150:儲存裝置
153、153#0~153#15:儲存單元
CH#0~CH#3:輸出入通道
CE#0~CE#3:致能訊號
610、630、651、653、671、673、690:階段
711~749:程式指令
791、793、795:資料表
S910~S985:方法步驟
圖1為依據本發明實施例的快閃記憶體的系統架構示意圖。
圖2為閃存介面與儲存單元的連接示意圖。
圖3A為簡單寫操作的時序圖。
圖3B為簡單讀操作的時序圖。
圖4A為包裹寫操作的時序圖。
圖4B為包裹讀操作的時序圖。
圖5A為安排命令佇列的時序圖。
圖5B為命令佇列中寫入工作的時序圖。
圖5C為命令佇列中讀取工作的時序圖。
圖6為依據本發明實施例的通用階段示意圖。
圖7為依據本發明實施例的通用階段中的函式執行示意圖。
圖8A至8C為依據本發明實施例的一段邏輯區塊位址(Logical Block Addresses LBAs)的分割示意圖。
圖9為依據本發明實施例的主機輸出入命令的執行方法流程圖。
以下說明為完成發明的較佳實現方式,其目的在於描述本發明的基本精神,但並不用以限定本發明。實際的發明內容必須參考之後的權利要求範圍。
必須了解的是,使用於本說明書中的”包含”、”包括”等詞,用以表示存在特定的技術特徵、數值、方法步驟、作業處理、元件以及/或組件,但並不排除可加上更多的技術特徵、數值、方法步驟、作業處理、元件、組件,或以上的任意組合。
於權利要求中使用如”第一”、”第二”、”第三”等詞是用來修飾權利要求中的元件,並非用來表示之間具有優先順序,前置關係,或者是一個元件先於另一個元件,或者是執行方法步驟時的時間先後順序,僅用來區別具有相同名字的元件。
必須了解的是,當元件描述為”連接”或”耦接”至另一元件時,可以是直接連結、或耦接至其他元件,可能出現中間元件。相反地,當元件描述為”直接連接”或”直接耦接”至另一元件時,其中不存在任何中間元件。使用來描述元件之間關係的其他語詞也可類似方式解讀,例如”介於”相對於”直接介於”,或者是”鄰接”相對於”直接鄰接”等等。
參考圖1。電子裝置100包含主機端(Host Side)110、控制器130及儲存裝置150,並且控制器130及儲存裝置150可合稱為裝置端(Device Side)。電子裝置100可為個人電腦、筆記型電腦(Laptop PC)、平板電腦、手機、數位相機、數位攝影機等電子產品。主機端110的主機介面(Host Interface)115及控制器130的前端介面(Frontend Interface)137可以嵌入式多媒體卡(Embedded Multi-Media Card eMMC)通訊協定彼此溝通。控制器130的後端介面(Backend Interface)139及儲存裝置150的閃存介面151可以雙倍資料率(Double Data Rate DDR)通訊協定彼此溝通,例如,開放NAND快閃(Open NAND Flash Interface ONFI)、雙倍資料率開關(DDR Toggle)或其他介面通訊協定。主機端110包含處理單元111,用以依據應用程式的要求通過主機介面115發出不同類型的主機命令給控制器130,例如簡單讀/寫命令(Simple Read/Write Command)、包裹讀/寫命令(Package Read/Write Command)、命令佇列(Command Queue)等。主機端110另包含動態隨機存取記憶體(Dynamic Random Access Memory DRAM)113,用於配置空間作為資料緩衝區,儲存即將寫入儲存裝置150的使用者資料,以及從儲存裝置150讀取的使用者資料。控制器130包含處理單元131,用於通過前端介面137從主機端110接收不同類型的主機命令,並據此通過後端介面139指示儲存裝置150執行資料讀取、寫入、抹除等操作。處理單元111及131中的任一個可使用多種方式實施,如使用通用硬體(例如,單一處理器、具平行處理能力的多處理器、圖形處理器或其他具運算能力的處理器),並且在執行軟體以及/或韌體指令時,提供之後描述的功能。控制器130另包含靜態隨機存取記憶體(Static Random Access Memory SRAM)135,用於配置空間作為資料緩衝區,儲存主機寫命令欲寫入儲存裝置150的使用者資料,主機讀命令指示從儲存裝置150讀取的使用者資料,以及執行過程
中需要的資料,例如,變數、資料表、主機-閃存對照表(Host-to-Flash H2F Table)、閃存-主機對照表(Flash-to-Host F2H Table)等。後端介面139另包含NAND閃存控制器(NAND Flash Controller NFC),提供存取儲存裝置150過程中需要的功能,例如命令序列器(Command Sequencer)、低密度奇偶校驗(Low Density Parity Check LDPC)等。控制器130另包含硬體引擎136,設置多種加速運算電路,讓處理單元131執行演算法時及後端介面139運行時使用,例如高級加密標準(Advanced Encryption Standard AES)加密引擎、AES解密引擎、循環冗餘校驗(Cyclic Redundancy Check CRC)編碼器、CRC解碼器等。
儲存裝置150包含儲存單元153,提供大量的儲存空間,通常是數百Gigabytes,甚至是Terabytes,用於儲存大量的使用者資料,例如高解析度圖片、影片等。儲存單元153中包含控制電路以及記憶體陣列,記憶體陣列中的記憶單元可包含單層式單元(Single Level Cells,SLCs)、多層式單元(Multiple Level Cells,MLCs)三層式單元(Triple Level Cells,TLCs)、四層式單元(Quad-Level Cells QLCs)或上述的任意組合。處理單元131透過後端介面139寫入使用者資料到儲存裝置150(詳細來說,儲存單元153)中的指定位址(目的位址),以及從儲存裝置150中的指定位址(來源位址)讀取使用者資料。後端介面139使用數個電子訊號來協調控制器130與儲存裝置150間的資料與命令傳遞,包含資料線(Data Line)、時脈訊號(clock signal)與控制訊號(control signal)。資料線可用於傳遞命令、位址、讀出及寫入的資料;控制訊號線可用於傳遞晶片致能(Chip Enable CE)、位址提取致能(Address Latch Enable ALE)、命令提取致能(Command Latch Enable CLE)、寫入致能(Write Enable WE)等控制訊號。
參考圖2,閃存介面151可包含四個輸出入通道(I/O channels,以下
簡稱通道)CH#0至CH#3,每一個通道連接四個NAND閃存模組,例如,通道CH#0連接NAND閃存模組153#0、153#4、153#8及153#12。每個NAND閃存模組可封裝為獨立的芯片(die)。後端介面139可通過閃存介面151發出致能訊號CE#0至CE#3中的一個來致能NAND閃存模組153#0至153#3、153#4至153#7、153#8至153#11、或153#12至153#15,接著以並行的方式從致能的NAND閃存模組讀取使用者資料,或者寫入使用者資料至致能的NAND閃存模組。
前端介面137通過輸出入接腳(Input-Output IO pins)耦接主機介面115,包含寄存器、資料緩衝器、接收器、傳送器、直接記憶體存取(Direct Memory Access DMA)控制器等。處理器131可於載入並執行通訊協定傳輸層(Protocol Transport Layer PTL)132的程式指令時,通過設定前端介面137中關聯的寄存器指示其中的接收器、傳送器或DMA控制器接收器完成特定操作。例如,PTL 132於執行時指示前端介面137的接收器接收主機端110發送的訊號,解譯(Interpret)訊號中攜帶的不同類型的主機命令、邏輯位址等。PTL 132可於執行時指示前端介面137的DMA控制器將前端介面137的資料緩衝器中的資料遷移到SRAM 135中的特定位址,用於將主機命令推入命令佇列、緩存待寫入的使用者資料等。PTL 132可於執行時指示前端介面137的DMA控制器將SRAM 135中特定位址的資料遷移到料前端介面137的資料緩衝器,並指示前端介面137的傳送器傳送資料緩衝器中的資料給主機端110,用於回覆從儲存裝置150讀取的使用者資料給主機端110。
後端介面139通過輸出入接腳耦接閃存介面151,包含寄存器、資料緩衝器、接收器、傳送器、DMA控制器等。處理器131可於載入並執行控制器層(Controller Layer CTL)134的程式指令時,通過設定後端介面139中關聯的寄存器指示其中的接收器、傳送器或DMA控制器接收器完成特定操作。
此外,處理器131可於載入並執行韌體轉譯層(Firmware Translation Layer FTL)133的程式指令時,執行相應於讀取、寫入或背景操作的多種演算法(Algorithms)。FTL 133主要負責將主機端的邏輯區塊位址(Logical Block Addresses LBAs)映射到儲存裝置150中的實體位置(又稱為邏輯-實體轉換)。詳細來說,所有LBAs代表可讓主機端110的檔案系統看見並管理的邏輯單元,並且被映射到儲存裝置150中的實體位置(區塊ID、頁面ID及區段ID)。為了提升儲存裝置150中記憶單元的耐磨性,LBA的實體位置可能在損耗平均(Wear Leveling)及其他背景管理演算法中動態改變,如壞塊管理(Bad Block Management)、垃圾回收(Garbage Collection)等。此外,FTL 133於執行時可通過後端介面139將SRAM 135中特定LBA的使用者資料寫入儲存裝置150中的指定實體位置,以及從儲存裝置150中的指定實體位置讀取特定LBA的使用者資料並儲存至SRAM 135中的特定位址。
以eMMC 5.1標準為例,主機介面115及前端介面137間包含一條命令線(Command Line CMD)及八條資料線(Data Lines D[7:0]),其中D[0]可讓裝置端利用來通知主機端110其正處於忙碌狀態(Busy State)。
於一些實施例,為寫入一個或多個LBA的使用者資料到裝置端,主機端110可發送簡單寫命令(Simple Write Command)給控制器130。簡單寫命令也可稱為一般寫命令(Normal Write Command)。參考圖3A,詳細來說,處理單元111於執行驅動程式時可通過主機介面115的命令線發送命令CMD25(或CMD24)及相關參數(Arguments ARG)給PTL 132,包含欲寫入的起始LBA及長度等資訊,用於啟動裝置端的簡單寫入操作。接著,處理單元131執行的PTL 132可通過前端介面137的命令線傳送回覆訊息(Response RESP),用於指出命令及參數的接收狀況。之後,PTL 132通過前
端介面137將D[0]訊號拉低(Pull-low)一段時間(時間t30至t31),用於通知主機端110此裝置端處於準備接收使用者資料的忙碌狀態。一旦準備就緒,PTL 132通過前端介面137放開(Release)D[0]訊號,使得處理單元111可開始通過主機介面115的D[7:0]傳送相應的使用者資料(User Data DAT)給裝置端。PTL 132通過前端介面137接收使用者資料完畢後,通過前端介面137將D[0]訊號拉低一段時間(時間t32至t33),用於通知主機端110此裝置端處於處理接收到的使用者資料的忙碌狀態。一旦處理完畢,PTL 132通過前端介面137放開D[0]訊號,也稱為回覆忙碌清除(Response Busy Clear R1b),代表簡單寫命令執行完成。
於一些實施例,為從裝置端讀取一個或多個LBA的使用者資料到裝置端,主機端110可發送簡單讀命令(Simple Read Command)給控制器130。簡單讀命令也可稱為一般讀命令(Normal Read Command)。參考圖3B,詳細來說,處理單元111於執行驅動程式時可通過主機介面115的命令線發送命令CMD18(或CMD17)及相關參數給PTL 132,包含欲讀取的起始LBA及長度,用於啟動裝置端的簡單讀取操作。接著,處理單元131執行的PTL 132可通過前端介面137的命令線傳送回覆訊息。一段預設的時間(時間t34至t35)後,PTL 132可通過前端介面137的資料線D[7:0]傳送LBA的使用者資料給主機端。當所有使用者資料都傳送完畢,簡單寫命令執行完成。
於另一些實施例,為寫入多包(Packs,最多64包)的使用者資料到裝置端,主機端110可發送包裹寫命令(Package-write Command)給控制器130,其中每包包含一個或多個LBA的使用者資料。參考圖4A,詳細來說,處理單元111於執行驅動程式時可通過主機介面115的命令線發送命令CMD25及其參數給PTL 132,例如,包裹命令的指示(Indicator of Packed Commands)、即將傳送的包裹頭
(Package Header)中的包裹命令(Packed Commands)數量等資訊,用於啟動裝置端的包裹寫操作。接著,處理單元131執行的PTL 132可通過前端介面137的命令線傳送回覆訊息。之後,PTL 132通過前端介面137將D[0]訊號拉低一段時間,用於通知主機端110此裝置端處於準備接收包裹頭的忙碌狀態。一旦準備就緒,PTL 132通過前端介面137放開D[0]訊號,使得處理單元111可開始通過主機介面115的D[7:0]傳送包裹頭給裝置端,其中,包含每包的操作類型(如寫入)、起始LBA位址及長度等資訊。包裹頭傳送後,PTL 132通過前端介面137將D[0]訊號拉低一段時間(時間t40至t41),用於通知主機端110此裝置端處於準備接收使用者資料的忙碌狀態。一旦準備就緒,PTL 132通過前端介面137放開D[0]訊號,使得處理單元111可開始通過主機介面115的D[7:0]傳送上述多包的使用者資料給裝置端。所屬技術領域人員理解包裹命令中的使用者資料的寫入順序不能改變。PTL 132通過前端介面137接收使用者資料完畢後,通過前端介面137將D[0]訊號拉低一段時間(時間t42至t43),用於通知主機端110此裝置端處於處理接收到的使用者資料的忙碌狀態。一旦處理完畢,PTL 132通過前端介面137放開D[0]訊號,也稱為回覆忙碌清除,代表包裹寫命令執行完成。
於另一些實施例,為從裝置端讀取多包(例如32包)的使用者資料到裝置端,主機端110可發送包裹讀命令(Package-read Command)給控制器130,其中每包包含一個或多個LBA的使用者資料。參考圖4B,詳細來說,處理單元111於執行驅動程式時可通過主機介面115的命令線發送命令CMD25及其參數給PTL 132,例如,包裹命令的指示、即將傳送的包裹頭中的包裹命令數量等資訊,用於啟動裝置端的包裹讀操作。接著,處理單元131執行的PTL 132可通過前端介面137的命令線傳送回覆訊息。之後,PTL 132通過前端介面137將D[0]訊號拉低一段時間,用於通知主機端110此裝置端處於準備
傳送包裹頭的忙碌狀態。一旦準備就緒,PTL 132通過前端介面137放開D[0]訊號,使得處理單元111可開始通過主機介面115的D[7:0]傳送包裹頭給裝置端,其中,包含每包的操作類型(如讀取)、起始LBA位址及長度等資訊。包裹頭傳送後,處理單元111可通過主機介面115的命令線依序發送多個命令CMD18(或CMD17)給PTL 132,用於啟動裝置端執行如包裹頭所述的多包讀取操作。於收到每個命令CMD18後,處理單元131執行的PTL 132可通過前端介面137的命令線傳送回覆訊息。於此需注意的是,由於每包的起始LBA位址及長度等資訊已經通過包裹頭傳送給裝置端,處理單元111不需要花時間及頻寬傳送每個命令CMD18(或CMD17)的相關參數給裝置端。一段預設的時間(時間t44至t45)後,PTL 132可通過前端介面137的資料線D[7:0]傳送一包的使用者資料給主機端。所屬技術領域人員理解包裹命令中的使用者資料的讀取順序不能改變。當最後一包的使用者資料傳送完畢,包裹讀命令執行完成。
如上所述的簡單或包裹讀寫操作中,本領域技術人員理解使用者資料或包裹頭在資料線上傳遞的期間,命令線是閒置的。於另一些實施例,為了讓命令線的使用更有效率,主機端110可安排一個命令佇列(Command Queue)並傳送給控制器130,其中包含多個(最多32個)工作(Tasks),每個工作指示讀取或寫入一個或多個LBA的使用者資料。參考圖5A,處理單元111於執行驅動程式時可通過主機介面115的命令線發送成對的命令CMD44及CMD45給PTL 132,用於告訴裝置端一個工作的內容。詳細來說,處理單元111發送命令CMD44及相關參數給PTL 132,包含工作編號等資訊,接著,發送命令CMD45及相關參數給PTL 132,包含這個工作的編號、工作類型(如讀取或寫入)、起始LBA位址及長度等資訊。
參考圖5B及5C,當一個命令佇列中一個或多個工作的資訊傳送給裝置端後,處理單元111可週期性地或在特定時機點通過主機介面115
的命令線發送命令CMD13給裝置端,請求讀取佇列狀態寄存器(Queue Status Register QSR)的值。前端介面137可包含32位元的佇列狀態寄存器,每個位元儲存命令佇列中相應工作的準備就緒狀態。例如,當QSR的第0個位元為”1”時,代表命令佇列中的第0個工作已經就緒,處理單元111能夠驅動裝置端啟動第0個工作。當QSR的第10個位元為”0”時,代表命令佇列中的第10個工作尚未就緒,處理單元111還不能夠啟動第10個工作。
針對命令佇列中已經就緒的寫入工作,參考圖5B,詳細來說,處理單元111於執行驅動程式時可通過主機介面115的命令線發送命令CMD47給PTL 132,包含工作編碼等資訊,用於啟動裝置端執行特定讀取工作。之後,PTL 132通過前端介面137將D[0]訊號拉低一段時間(時間t50至t51),用於通知主機端110此裝置端處於準備接收使用者資料的忙碌狀態。一旦準備就緒,PTL 132通過前端介面137放開D[0]訊號,使得處理單元111可開始通過主機介面115的D[7:0]傳送上述工作的使用者資料給裝置端。PTL 132通過前端介面137接收使用者資料完畢後,通過前端介面137將D[0]訊號拉低一段時間(時間t52至t53),用於通知主機端110此裝置端處於處理接收到的使用者資料的忙碌狀態。一旦處理完畢,PTL 132通過前端介面137放開D[0]訊號,也稱為回覆忙碌清除,代表此寫入工作執行完成。於此需注意的是,當主機端經由資料線D[7:0]傳送使用者資料給裝置端的期間,處理單元111可通過主機介面115的命令線發送另一對描述工作內容的命令CMD44與CMD45及其參數,或其他的命令給裝置端。
針對命令佇列中已經就緒的讀取工作,參考圖5C,詳細來說,處理單元111於執行驅動程式時可通過主機介面115的命令線發送命令CMD46及相關參數給PTL 132,包含工作編碼等資訊,用於啟動裝置端執行特定寫入工作。一段預設的時間(時間t54至t55)後,PTL
132可通過前端介面137的資料線D[7:0]傳送此工作的使用者資料給主機端。於此需注意的是,當裝置端經由資料線D[7:0]傳送使用者資料給主機端的期間,處理單元111可通過主機介面115的命令線發送另一對描述工作內容的命令CMD44與CMD45及其參數,或其他的命令給裝置端。
所屬技術領域人員理解,裝置端可自由安排命令佇列中的執行順序,不同於如上所述的包裹讀/寫命令。
於一些實施方式中,因應如上所述的簡單讀/寫命令、包裹讀/寫命令及命令佇列,會設計三套不同的PTL及韌體轉譯層(Firmware Translation Layer FTL),每一套對應上述命令執行中之一者。然而,要維護處理不同協定的多個韌體模組並不容易。例如,支援一種類型的主機輸出入命令的韌體模組的演算法改變時,其他韌體模組也需要跟著改變,才不會因演算法不同而於執行過程中發生不預期的錯誤。此外,需要更大的非揮發儲存空間儲存三套不同的PTL及FTL,例如,控制器130中的唯讀記憶體(未顯示於圖1)或SRAM 135,或者儲存裝置150中的儲存單元153。
為解決如上所述的問題,本發明實施例提出使用一套韌體模組(例如包含PTL及FTL)來處理不同類型的主機輸出入命令。參考圖6,為反應多種類型的主機輸出入命令,例如CMD24、CMD25、CMD17、CMD18、CMD46、CMD47等,處理單元131於執行PTL 132及FTL 133時使用通用架構的多個階段(簡稱通用階段Generic Stages)來驅動前端介面137與主機端110間的交互(Interactions),用於傳送從儲存單元153讀取的使用者資料給主機端110,以及從主機端110接收即將寫入儲存單元153的使用者資料。通用階段包含:設定就緒(Set Ready)610;準備管理(Prepare Handle)630;傳送資料觸發(Send Data Triggering)651;傳送資料等待(Send Data Waiting)653;接收資料觸發(Get Data Triggering)671;接收資料
等待(Get Data Waiting)673;及回覆管理(Response Handle)690。通用階段包含寫入路徑及讀取路徑,寫入路徑用於反應主機寫命令而從主機端110接收即將寫入儲存單元153的使用者資料,而讀取路徑用於反應主機讀命令而傳送從儲存單元153讀取的使用者資料給主機端110。主機寫命令(如CMD25、CMD24、CMD23、CMD13+CMD47等)的執行會經歷五個階段:設定就緒610;準備管理630;接收資料觸發671;接收資料等待673;及回覆管理690。主機讀命令(如CMD18、CMD17、CMD13+CMD46等)的執行會經歷五個階段:設定就緒610;準備管理630;傳送資料觸發651;傳送資料等待653;及回覆管理690。處理單元131於每個階段會執行與前端介面137有關的操作,用於執行主機輸出入命令,並且於任何階段間的空閒時間區間,執行其他的操作,例如FTL 133中的特定演算法。
設定就緒階段610只為了處理命令佇列中的工作,於此階段中不為簡單讀/寫命令及包裹/讀寫命令實施任何前端介面137的活動。也就是說,為了使用通用階段來統整不同類型的主機輸出入命令,簡單寫命令、簡單讀命令、包裹寫命令及包裹讀命令的執行必須經歷設定就緒階段610,但不做任何處理。處理單元131可為命令佇列依據FTL 133的指示設定前端介面137的QSR中的特定位元為”1”,使得PTL 132能夠因應主機端110將來發出的命令CMD13回覆最新的就緒狀態給主機端110。
準備管理階段630用來處理簡單讀/寫命令、包裹/讀寫命令及命令佇列中的工作。為反應主機端110發出的主機寫命令CMD24、CMD25、CMD23或CMD47,處理單元131通過前端介面137將資料線D[0]拉低(如圖3A的時間點t30、圖4A的時間點t40或圖5B的時間點t50),用於取得資料線D[7:0]的控制權。接著,執行一連串的準備操作(Preparation Operations),例如,在SRAM 135中配置空間來儲存
待寫入的使用者資料,設定前端介面137中的寄存器,用來通知前端介面137中的DMA控制器之後要從主機端110接收多少個LBA的使用者資料與SRAM 135中配置空間的位址。於準備工作完成後,處理單元131通過前端介面137釋放資料線D[0](如圖3A的時間點t31、圖4A的時間點t41或圖5B的時間點t51),用於交出資料線D[7:0]的控制權。為反應主機端110發出的主機讀命令CMD17、CMD18或CMD46,處理單元131可於一段預設的時間區間(如圖3B的時間t34至t35、如圖4B的時間t44至t45或如圖5C的時間t54至t55),執行一連串的準備操作,例如,設定前端介面137中的寄存器,用來通知前端介面137中的DMA控制器之後要傳送多少個LBA的使用者資料給主機端110,與SRAM 135中儲存待回覆的使用者資料的位址。
處理單元131於傳送資料觸發階段651啟動前端介面137中的DMA控制器開始於資料線D[7:0]上傳送使用者資料給主機端110,並且於接收資料觸發階段671啟動前端介面137中的DMA控制器開始於資料線D[7:0]上從主機端110接收使用者資料。
處理單元131於傳送資料等待階段653週期性檢查前端介面137中的傳送計數器(Transmission Counter),用來判斷DMA控制器是否傳送完所有的使用者資料,並且於接收資料等待階段753週期性檢查前端介面137中的接收計數器(Reception Counter),用來判斷DMA控制器是否接收完所有的使用者資料。
當DMA控制器傳送完或接收完所有的使用者資料後,處理單元131於回覆管理690階段檢查前端介面137中的相關寄存器,判斷於使用者資料的傳送或接收過程中是否發生錯誤。如果是,處理單元131通過前端介面137回覆適當的錯誤訊息給主機端110。當DMA控制器傳送完所有的使用者資料給裝置端,並且沒有發現任何錯誤,處理單元131通過前端介面將資料線D[0]拉低(如圖3A的時間點t32、圖4A的時間點t42或圖5B的時間點t52),用於通知主機端110此裝置
端處於寫入使用者資料的忙碌狀態。於使用者資料的寫入操作結束後,處理單元131通過前端介面釋放資料線D[0](如圖3A的時間點t33、圖4A的時間點t43或圖5B的時間點t53),用於交出資料線D[7:0]的控制權。
由於FTL 133包含用於執行主機輸出入命令的多種演算法,例如,通過硬體引擎136的協助來查找LBA對應的實體位址,解密讀取的資料、檢查讀取資料的正確性、於讀取資料含有錯誤位元時執行錯誤修正、加密使用者資料、產生相應於使用者資料的LDPC碼、CRC碼、錯誤校驗及修正(Error Check and Correction ECC)碼等,工作負載繁重。於一些實施例中,參考圖7,為了平衡工作負載,PTL 132可提供回呼函式(Callback Functions)715、717、721、723、725、727及729給FTL 133,包含如上所述階段對前端介面137的操作,避免FTL 133花費過多的時間及運算資源來運行上述的通用階段。詳細來說,PTL 132包含函式PushQueue()711,用於被處理單元131執行時解讀通過前端介面137接收的主機輸出入命令,判斷這些主機輸出入命令是否形成簡單讀/寫命令、包裹讀/寫命令或命令佇列。接著,函式PushQueue()711依據解讀出的主機輸出入命令產生命令位元表(Command Bit Table CBT)791、槽位元表(Slot Bit Table SBT)793及使用者資料表(User-data Storage Table)795,並儲存至SRAM 135。
因為簡單讀/寫命令、包裹讀/寫命令及命令佇列的形成需要不同種類的訊息往返,且可包含一個或多個讀取、寫入操作或其任意組合,因此,通過CBT 791可讓PTL 133將不同種類的讀取及寫入操作統合成一個共通格式,方便管理。為了兼容簡單讀/寫命令、包裹讀/寫命令及命令佇列,CBT 791可包含32個紀錄(Entries),每個紀錄關聯於一個輸出入操作,至少包含兩個欄位:第1個欄位表示有效旗標(Valid Flag),第2個欄位表示命令類型(Command Type,其
中”0”代表讀取,”1”代表寫入,”2”代表抹除),預設為虛假值(NULL)。當接收到簡單寫命令(如收到CMD24/25,且其中沒有指示形成包裹命令),函式PushQueue()711分別儲存”1”、”1”至CBT 791中第0個紀錄的兩個欄位。當偵測到簡單讀命令(如收到CMD17/18,且之前沒有收到指示形成包裹命令的CMD25),函式PushQueue()711分別儲存”1”、”0”至CBT 791中第0個紀錄的兩個欄位。當接收到包裹寫命令(如收到包裹頭中指示的多包待寫入的資訊),函式PushQueue()711依序分別儲存”1”、”1”至CBT 791中第0至第m-1個紀錄中的兩個欄位,m代表包的數量。當接收到包裹讀命令(如收到包裹頭中指示的多包待讀取的資訊),函式PushQueue()711依序分別儲存”1”、”0”至CBT 791中第0至第n-1個紀錄中的兩個欄位,n代表包的數量。當接收到命令佇列(如收到一或多對CMD44及CMD45指示的工作資訊),函式PushQueue()711依據每一對的的參數中指示的工作編號p、工作類型分別儲存”1”與”0”或”1”與”1”至CBT 791的第p個紀錄中的兩個欄位。表1顯示相應於一個範例命令佇列的CBT:
表1中只列出第0至第10個紀錄,代表命令佇列中包含11個工作(從0開始編號),其中第1、第2至第4個工作為讀取工作,其餘為寫入工作。
此外,CBT 791也可以支援主機抹除命令(Host Erase Command)。當偵測到簡單抹除命令(如收到CMD35/36/38),函式PushQueue()711分別儲存”1”、”2”至CBT 791中第0個紀錄的兩個欄位。當接收到命令佇列中特定工作的刪除命令(如收到CMD48),函式PushQueue()711分別儲存”1”、”2”至CBT 791中相應紀錄的兩個欄位。
主裝置110可分割一段LBA的使用者資料成多個區段(Partitions),並指定將每個區段儲存於一種記憶單元,例如SLCs、MLCs、TLCs或QLCs。例如,參考圖8A所示的分割,LBA#0至LBA#1023的使用者資料被指定儲存於TLCs。參考圖8B所示的分割,LBA#0至LBA#511的使用者資料被指定儲存於SLCs,而LBA#512至LBA#1023的使用者資料被指定儲存於TLCs。參考圖8C所示的分割,LBA#0至LBA#255、LBA#256至LBA#511、LBA#512至LBA#1023的使用者資料被指定分別儲存於TLCs、SLCs、TLCs。
為了提升存取的效能,PTL 132可分割一段橫跨兩種以上記憶單元的使用者資料的操作,讓每個分割後的操作只存取相同種類的記憶單元。以圖8C為例,LBA#0至LBA#1023的寫入操作可分割為三個操作,分別寫入LBA#0至LBA#255、LBA#256至LBA#511、LBA#512至LBA#1023的使用者資料。函式PushQueue()711可根據主裝置110的LBA的記憶單元組態檢查CBT 791中每個有效操作是否橫跨兩種以上記憶單元。如果是,則將此有效操作分割將多個操作。接著,函式PushQueue()711根據分割結果產生SBT 793,讓FTL 133
能夠根據SBT 793的內容安排並執行存取使用者資料的操作。SBT 793可包含96個紀錄,每個紀錄關聯於一個分割後輸出入操作,至少包含四個欄位:第1個欄位儲存讀取旗標(Read Flag,其中”0”代表非讀取,”1”代表讀取);第2個欄位儲存寫入旗標(Write Flag,其中”0”代表非寫入,”1”代表寫入);第3個欄位儲存抹除旗標(Erase Flag,其中”0”代表非抹除,”1”代表抹除);第4個欄位儲存CBT 791的紀錄編號,用來將此分割後輸出入操作關聯到CBT 791中的特定操作,預設為虛假值(NULL)。延續表1的範例,假設第4個工作要求寫入一段橫跨TLC、SLC及TLC的LBA區間的使用者資料,而第5個工作要求讀取一段橫跨TLC、SLC及TLC的LBA區間的使用者資料。表2顯示依據表1的範例CBT所產生的範例SBT:
表2中只列出第0至第14個紀錄,代表切割後的15個操作(從0開始編號),其中第4至第6個紀錄儲存從CBT 791的第4個操作切割出來的子操作的資訊,第7至第9個紀錄儲存從CBT 791的第5個操作切割出來的子操作的資訊。
此外,函式PushQueue()711產生使用者資料儲存表795,用於記錄SBT 793中每一個操作的參數。使用者資料儲存表795可包含96個紀錄,每個紀錄關聯於SBT 793中的一個記錄,至少包含四個欄位:第1個欄位儲存SBT 793的紀錄編號,用來關聯到SBT 793中的特定操作;第2個欄位儲存起始的LBA編號;第3個欄位儲存存取資料的長度;以及第4個欄位儲存SRAM 135中分配給此操作的記憶體位址,作為待寫入或讀取資料的資料緩衝區。
參考回圖7,當函式PushQueue()711執行完畢,處理單元131載入並執行指令713來產生一個新的FTL 133的執行緒(Thread)。PTL 132可傳送回呼函式715、717、721、723、725、727及729的位址給FTL 133的執行緒,讓FTL 133的執行緒能夠呼叫這些函式。此外,PTL 132可傳送命令類型(例如,簡單輸出入命令、包裹輸出入命令、命令佇列等)、CBT 791、SBT 793及使用者資料表795給FTL 133的執行緒,讓FTL 133的執行緒能據以完成指定的輸出入操作。PTL 132中實作函式SetCmdReady()715、PrepareHandle()717、GetDataFromHost_Trig()721、SendDataToHost_Trig()723、GetDataFromHost_Wait()725、SendDataToHost_Wait()727、ResponseHandle()729分別用來完成如圖6所述設定就緒階段610、準備管理階段630、接收資料觸發階段671、傳送資料觸發階段651、接收資料等待階段673、傳送資料等待階段653、回覆管理階段690的技術內容。於執行SBT 793中每個寫入操作的期間,FTL 133可依序呼叫函式SetCmdReady()715、PrepareHandle()717、GetDataFromHost_Trig()721、GetDataFromHost_Wait()725、
ResponseHandle()729,用於通過前端介面137完成一系列與主機端110間的交互。於執行SBT 793中每個讀取操作的期間,FTL 133可依序呼叫函式SetCmdReady()715、PrepareHandle()717、SendDataToHost_Trig()723、SendDataToHost_Wait()727、ResponseHandle()729,用於通過前端介面137完成一系列與主機端110間的交互。PTL 132可於SRAM 135中記錄產生的FTL 133的執行緒關聯於何種輸出入命令的資訊,使得如上所述任何函式接收到從FTL 133的執行緒發出的呼叫時,可知道FTL 133的執行緒目前正執行何種輸出入命令。
詳細來說,當函式SetCmdReady()715收到從FTL 133的執行緒發出的呼叫後,為命令佇列設定前端介面137中的佇列狀態寄存器的一個位元,代表命令佇列中的相應工作已經就緒;以及不為簡單寫命令、簡單讀命令、包裹寫命令及包裹讀命令進行任何上述前端介面的活動。
當函式PrepareHandle()717收到從FTL 133的執行緒發出的呼叫後,實施如上所述的準備管理階段630。當函式GetDataFromHost_Trig()721收到從FTL 133的執行緒發出的呼叫後,實施如上所述的接收資料觸發階段671。當函式SendDataToHost_Trig()723收到從FTL 133的執行緒發出的呼叫後,實施如上所述的傳送資料觸發階段651。
當函式GetDataFromHost_Wait()725收到從FTL 133的執行緒發出的呼叫後,為反應簡單讀命令、包裹讀命令中此包的使用者資料、或命令佇列中的讀取工作,檢查前端介面137中的傳送計數器,用來判斷DMA控制器是否傳送完使用者資料,並回覆判斷結果給FTL 133的執行緒。當函式SendDataToHost_Wait()727收到從FTL 133的執行緒發出的呼叫後,為反應簡單寫命令、包裹寫命令中此包的使用者資料、或命令佇列中的寫入工作,檢查前端介面中的接收計數器來判斷DMA控制器是否接收完使用者資料,並回覆判斷結果給
FTL 133的執行緒。
當函式ResponseHandle()729收到從FTL 133的執行緒發出的呼叫後,為反應簡單寫命令、包裹寫命令中此包的使用者資料、或命令佇列中的寫入工作,驅動前端介面137將資料線D[0]拉低一段時間,用於執行寫入操作,並且於此段時間到達後釋放資料線。
FTL 133的執行緒的執行細節可參考圖9所示的方法流程圖。此方法為反應多種類型的主機輸出入命令,使用通用架構的多個階段來驅動前端介面137與主機端110間的交互,用於傳送從儲存單元153讀取的使用者資料給主機端110,以及從主機端110接收即將寫入儲存單元153的使用者資料。處理單元131執行FTL 133的執行緒時反覆實施一個迴圈(步驟S910至步驟S985),直到SBT 793中的全部有效操作都完成為止(步驟S980中”是”的路徑)。於每一回合中,FTL 133的執行緒處理SBT 793中的一個有效操作。描述如下:步驟S910:從SBT 793挑選第一或下一個操作。因應不同主機輸出入命令的特性,操作的挑選可服從以下的規則。當上一個執行的操作為子操作且其他的子操作尚未完成時,FTL 133的執行緒只能挑選下一個子操作。例如,當上一個執行的操作為表2中的第4個紀錄指出的讀取操作時,FTL 133的執行緒只能挑選表2中的第5個紀錄指出的讀取操作。當命令類型為包裹輸出入命令時,FTL 133的執行緒只能按照SBT 793中紀錄的操作順序挑選操作。當命令類型為命令佇列時,FTL 133的執行緒可依據執行效能的需求挑選SBT 793中任一個紀錄的操作。
步驟S920:判斷挑選的操作是否為讀取操作。如果是,流程前進到步驟S925。否則,流程跳過步驟S925,直接前進到步驟S930。FTL 133的執行緒可通過檢查SBT 793中相應於挑選操作的讀取旗標來完成這個判斷。
步驟S925:依據使用者資料表795中相應紀錄的內容指示CTL 134通
過後端介面139從儲存單元153讀取指定LBA的使用者資料,並且儲存於SRAM 135中的指定位址。FTL 133可更為使用者資料的讀取執行必要的演算法,例如,通過硬體引擎136的協助來查找LBA對應的實體位址,解密讀取的資料、檢查讀取資料的正確性、於讀取資料含有錯誤位元時執行錯誤修正等。
步驟S930:呼叫SetCmdReady(),指示PTL 132完成設定就緒階段610的活動。FTL 133的執行緒可以參數的方式,攜帶挑選操作的SBT編號給PTL 132。例如,參考表1及表2,當相應於SBT 793的第0個紀錄的使用者資料讀取完成時,FTL 133的執行緒指示PTL 132關於SBT 793的第0個工作已經就緒的資訊。接著,PTL 132中實作的函式SetCmdReady()可經由查詢SBT 793來發現SBT 793中第0個工作關聯到CBT 791中的第0個工作,接著將QSR中第0個位元設為”1”,使得PTL 132能夠通知主機端110命令佇列中的第0個工作已經就緒。於此需注意的是,當命令類型為簡單輸出入命令或包裹輸出入命令時,為了減少因增加判斷條件而增加程式的複雜度,FTL 133的執行緒依然會呼叫SetCmdReady(),但是PTL 132不會執行任何活動。
步驟S935:判斷是否收到期望的命令。如果是,流程前進到步驟S940。否則,流程於一段預設時間後繼續步驟S935的判斷。例如,如果之前已經指示PTL 132將QSR中第0個位元設為”1”,則FTL 133的執行緒期待PTL 132收到相應於SBT 793中第0個紀錄的主機輸出入命令,例如,圖3A中的命令CMD25、圖3B中的命令CMD18、圖4A中的命令CMD25、圖4B中的命令CMD18、圖5B中的命令CMD47、圖5C中的命令CMD46,或其他類似命令,用於繼續後續的處理。FTL 133的執行緒可詢問PTL 132是否已經接收到相應於之前指示就緒的操作的命令。當PTL 132回覆”是”時,流程判斷已經收到期望的命令。
步驟S940:呼叫PrepareHandle(),指示PTL 132完成準備管理階段
630的活動。
步驟S945:判斷操作類型為讀取操作或寫入操作。當操作類型為讀取操作時,流程前進到步驟S952;當操作類型為寫入操作時,流程前進到步驟S962。FTL 133的執行緒可通過檢查SBT 793中相應於挑選操作的讀取旗標及寫入旗標來完成這個判斷。
步驟S952:呼叫SendDataToHost_Trig(),指示PTL 132完成傳送資料觸發階段651的活動。
步驟S954:週期性呼叫SendDataToHost_Wait(),指示PTL 132完成傳送資料等待階段653的活動,直到使用者資料傳送完成。
步驟S962:呼叫GetDataFromHost_Trig(),指示PTL 132完成接收資料觸發階段671的活動。
步驟S964:週期性呼叫GetDataFromHost_Wait(),指示PTL 132完成接收資料等待階段673的活動,直到使用者資料接收完成。
步驟S966:依據使用者資料表795中相應紀錄的內容指示CTL 134通過後端介面139將SRAM 135中指定位址的特定LBA的使用者資料寫入儲存單元153。於此須注意的是,當裝置端運行於快取模式(Cache Mode)時,流程可不執行此步驟。所屬技術領域人員可使用其他的演算法,於其他的適當時間點合併SRAM 135中所有或部分的待寫入使用者資料,接著一次寫入儲存單元153,本發明並不因此侷限。FTL 133可更為使用者資料的寫入執行必要的演算法,例如,通過硬體引擎136的協助來加密使用者資料、產生相應於使用者資料的LDPC碼、CRC碼、ECC碼等。
步驟S970:呼叫ResponseHandle(),指示PTL 132完成回覆管理階段690的活動。
步驟S980:判斷是否完成SBT 793中全部有效操作。如果是,流程結束,FTL 133的執行緒被刪除。否則,流程前進到步驟S985。
步驟S985:請求PTL 132更新SBT 793。由於在使用者資料的傳送與
接收期間,主機端110可發送更多成對的描述工作內容的命令CMD44與CMD45及其參數,使得SBT 793可能包含更多尚未處理的操作,因此,FTL 133的執行緒於每次執行完一個操作後就請求PTL 132提供最新的SBT 793。於此需注意的是,步驟S985並不一定只能安排在每次執行完一個操作後,可以安排更多的SBT 793的更新步驟於流程的任意位置。如果FTL 133的執行緒只依據一開始接收到的SBT 793中的紀錄來執行而不更新SBT 793,FTL 133的執行緒在執行完原始SBT 793中指示的操作後就會被刪除。於使用者資料的傳送與接收期間接收到的命令CMD44與CMD45及其參數所指示的工作,只能在PTL 132產生FTL 133的另一個新執行緒中被執行。如上所示的執行緒刪除及重新產生會耗費不必要的運算資源,降低整體效能。
本發明所述的方法中的全部或部分步驟可以計算機指令實現,例如儲存裝置中特定硬體的驅動程式等。此外,也可實現於其他類型程式。所屬技術領域具有通常知識者可將本發明實施例的方法撰寫成計算機指令,為求簡潔不再加以描述。依據本發明實施例方法實施的計算機指令可儲存於適當的電腦可讀取媒體,例如DVD、CD-ROM、USB碟、硬碟,亦可置於可通過網路(例如,網際網路,或其他適當載具)存取的網路伺服器。
雖然圖1中包含了以上描述的元件,但不排除在不違反發明的精神下,使用更多其他的附加元件,已達成更佳的技術效果。此外,雖然圖9的流程圖採用指定的順序來執行,但是在不違反發明精神的情況下,熟習此技藝人士可以在達到相同效果的前提,修改這些步驟間的順序,所以,本發明並不侷限於僅使用如上所述的順序。此外,熟習此技藝人士亦可以將若干步驟整合為一個步驟,或者是除了這些步驟外,循序或平行地執行更多步驟,本發明亦不因此而侷限。
雖然本發明使用以上實施例進行說明,但需要注意的是,這些描述並非用於限縮本發明。相反地,此發明涵蓋了熟習此技藝人士顯而易見的修改與相似設置。所以,申請權利要求範圍須以最寬廣的方式解釋來包含所有顯而易見的修改與相似設置。
610:設定就緒階段
630:準備管理階段
651:傳送資料觸發階段
653:傳送資料等待階段
671:接收資料觸發階段
673:接收資料等待階段
690:回覆管理階段
Claims (16)
- 一種主機輸出入命令的執行方法,由一裝置端中的一處理單元執行,包含:為反應多種類型的主機輸出入命令,使用一通用架構的多個階段來驅動一前端介面進行與一主機端間的交互,用於傳送從一儲存單元讀取的使用者資料給上述主機端,以及從上述主機端接收即將寫入上述儲存單元的使用者資料,其中,上述前端介面包含一寄存器和耦接至上述主機端的一資料線,上述通用架構的上述階段用來存取上述前端介面中的上述寄存器和操作上述前端介面中的上述資料線,用以完成與上述主機端間的交互。
- 如請求項1所述的主機輸出入命令的執行方法,其中,上述處理單元通過上述前端介面使用嵌入式多媒體卡通訊協定與上述主機端溝通。
- 如請求項1至2中任一項所述的主機輸出入命令的執行方法,其中,上述主機輸出入命令包含一簡單寫命令、一簡單讀命令、一包裹寫命令、一包裹讀命令及一命令佇列,上述簡單寫命令指示上述裝置端寫入一個或多個邏輯區塊位址的使用者資料,上述簡單讀命令指示上述裝置端讀取一個或多個邏輯區塊位址的使用者資料,上述包裹寫命令指示上述裝置端寫入多包的使用者資料,上述包裹讀命令指示上述裝置端讀取多包的使用者資料,上述每包的使用者資料關聯於一個或多個邏輯區塊位址,上述包裹寫命令或上述包裹讀命令中的上述多包的執行順序不能改變,上述命令佇列包含多個工作,以及上述每個工作指示上述裝置端寫入或讀取一個或多個邏輯區塊位址的使用者資料。
- 如請求項3所述的主機輸出入命令的執行方法,其中,上述階段 中之一者為一設定就緒階段,上述方法包含:於上述設定就緒階段中,為上述命令佇列設定上述前端介面中的一佇列狀態寄存器的一位元,代表上述命令佇列中的相應工作已經就緒;以及於上述設定就緒階段中,不為上述簡單寫命令、上述簡單讀命令、上述包裹寫命令及上述包裹讀命令進行任何上述前端介面的活動。
- 如請求項4所述的主機輸出入命令的執行方法,其中,上述前端介面包含與上述主機端連接的一命令線及多條資料線,上述階段包含一準備管理階段、一傳送資料觸發階段、一傳送資料等待階段、一接收資料觸發階段及一接收資料等待階段,上述方法包含:於上述準備管理階段,為反應上述簡單寫命令、上述簡單讀命令、上述包裹寫或讀命令中一包的使用者資料、或上述命令佇列中的一工作,驅動上述前端介面將上述資料線中的一條拉低一段時間,用於執行一連串的準備操作,並且於上述準備操作完成後,釋放上述資料線;於上述傳送資料觸發階段,為反應上述簡單讀命令、上述包裹讀命令中上述包的使用者資料、或上述命令佇列中的一讀取工作,啟動上述前端介面中的一直接記憶體存取控制器開始於上述資料線上傳送使用者資料給上述主機端;於上述傳送資料等待階段,為反應上述簡單讀命令、上述包裹讀命令中上述包的使用者資料、或上述命令佇列中的上述讀取工作,週期性檢查上述前端介面中的一傳送計數器,用來判斷上述直接記憶體存取控制器是否傳送完使用者資料;於上述接收資料觸發階段,為反應上述簡單寫命令、上述包裹寫命令中上述包的使用者資料、或上述命令佇列中的一寫入工作,啟動上述前端介面中的上述直接記憶體存取控制器開始於上述 資料線上從上述主機端接收使用者資料;以及於上述接收資料等待階段,為反應上述簡單寫命令、上述包裹寫命令中上述包的使用者資料、或上述命令佇列中的上述寫入工作,週期性檢查上述前端介面中的一接收計數器,用來判斷上述直接記憶體存取控制器是否接收完使用者資料。
- 如請求項5所述的主機輸出入命令的執行方法,其中,上述階段包含一回覆管理階段,上述方法包含:於上述直接記憶體存取控制器傳送完使用者資料後的上述回覆管理階段,為反應上述簡單寫命令、上述包裹寫命令中上述包的使用者資料、或上述命令佇列中的上述寫入工作,驅動上述前端介面將上述資料線中的一條拉低一段時間,用於執行寫入操作,並且於上述寫入操作完成後,釋放上述資料線。
- 如請求項1所述的主機輸出入命令的執行方法,其中,上述階段包含一寫入路徑及一讀取路徑,上述寫入路徑用於反應一主機寫命令而從上述主機端接收即將寫入上述儲存單元的使用者資料,以及上述讀取路徑用於反應一主機讀命令而傳送從上述儲存單元讀取的使用者資料給上述主機端。
- 一種電腦程式產品,用於主機輸出入命令的執行,包含由裝置端中之一處理單元載入並執行的程式碼:為反應多種類型的主機輸出入命令,使用一通用架構的多個階段來驅動一前端介面進行與一主機端間的交互,用於傳送從一儲存單元讀取的使用者資料給上述主機端,以及從上述主機端接收即將寫入上述儲存單元的第二使用者資料,其中,上述前端介面包含一寄存器和耦接至上述主機端的一資料線,上述通用架構的上述階段用來存取上述前端介面中的上述寄存器和操作上述前端介面中的上述資料線,用以完成與上述主機端間的交互。
- 如請求項8所述的電腦程式產品,其中,上述主機輸出入命令包含一簡單寫命令、一簡單讀命令、一包裹寫命令、一包裹讀命令及一命令佇列,上述簡單寫命令指示上述裝置端寫入一個或多個邏輯區塊位址的使用者資料,上述簡單讀命令指示上述裝置端讀取一個或多個邏輯區塊位址的使用者資料,上述包裹寫命令指示上述裝置端寫入多包的使用者資料,上述包裹讀命令指示上述裝置端讀取多包的使用者資料,上述每包包含一個或多個邏輯區塊位址的使用者資料,上述多包的執行順序不能改變,上述命令佇列包含多個工作,以及上述每個工作指示上述裝置端寫入或讀取一個或多個邏輯區塊位址的使用者資料。
- 如請求項9所述的電腦程式產品,其中,上述階段中之一者為一設定就緒階段,上述程式碼包含:於上述設定就緒階段中,為上述命令佇列設定上述前端介面中的一佇列狀態寄存器的一位元,代表上述命令佇列中的相應工作已經就緒;以及於上述設定就緒階段中,不為上述簡單寫命令、上述簡單讀命令、上述包裹寫命令及上述包裹讀命令進行任何上述前端介面的活動。
- 如請求項8所述的電腦程式產品,其中,上述階段包含一寫入路徑及一讀取路徑,上述寫入路徑用於反應一主機寫命令而從上述主機端接收即將寫入上述儲存單元的使用者資料,以及上述讀取路徑用於反應一主機讀命令而傳送從上述儲存單元讀取的使用者資料給上述主機端。
- 一種主機輸出入命令的執行裝置,包含:一前端介面,耦接於一主機端,包含一寄存器和一資料線;以及一處理單元,耦接於上述前端介面,為反應多種類型的主機輸出入命令,使用一通用架構的多個階段來驅動上述前端介面進行與 上述主機端間的交互,用於傳送從一儲存單元讀取的使用者資料給上述主機端,以及從上述主機端接收即將寫入上述儲存單元的使用者資料,其中,上述通用架構的上述階段用來存取上述前端介面中的上述寄存器和操作上述前端介面中的上述資料線,用以完成與上述主機端間的交互。
- 如請求項12所述的主機輸出入命令的執行裝置,其中,上述主機輸出入命令包含一簡單寫命令、一簡單讀命令、一包裹寫命令、一包裹讀命令及一命令佇列,上述簡單寫命令指示上述裝置端寫入一個或多個邏輯區塊位址的使用者資料,上述簡單讀命令指示上述裝置端讀取一個或多個邏輯區塊位址的使用者資料,上述包裹寫命令指示上述裝置端寫入多包的使用者資料,上述包裹讀命令指示上述裝置端讀取多包的使用者資料,上述每包的使用者資料關聯於一個或多個邏輯區塊位址,上述包裹寫命令或上述包裹讀命令中的上述多包的執行順序不能改變,上述命令佇列包含多個工作,以及上述每個工作指示上述裝置端寫入或讀取一個或多個邏輯區塊位址的使用者資料。
- 如請求項13所述的主機輸出入命令的執行裝置,其中,上述階段包含一設定就緒階段,上述處理單元於上述設定就緒階段中,為上述命令佇列設定上述前端介面中的一佇列狀態寄存器的一位元,代表上述命令佇列中的相應工作已經就緒;以及於上述設定就緒階段中,不為上述簡單寫命令、上述簡單讀命令、上述包裹寫命令及上述包裹讀命令進行任何上述前端介面的活動。
- 如請求項14所述的主機輸出入命令的執行裝置,其中,上述前端介面包含與上述主機端連接的一命令線及多條資料線,上述階段包含一準備管理階段、一傳送資料觸發階段、一傳送資料等待階段、一接收資料觸發階段及一接收資料等待階段,上述處理單元於上述 準備管理階段,為反應上述簡單寫命令、上述簡單讀命令、上述包裹寫或讀命令中一包的使用者資料、或上述命令佇列中的一工作,驅動上述前端介面將上述資料線中的一條拉低一段時間,用於執行一連串的準備操作,並且於上述準備操作完成後,釋放上述資料線;於上述傳送資料觸發階段,為反應上述簡單讀命令、上述包裹讀命令中上述包的使用者資料、或上述命令佇列中的一讀取工作,啟動上述前端介面中的一直接記憶體存取控制器開始於上述資料線上傳送使用者資料給上述主機端;於上述傳送資料等待階段,為反應上述簡單讀命令、上述包裹讀命令中上述包的使用者資料、或上述命令佇列中的上述讀取工作,週期性檢查上述前端介面中的一傳送計數器,用來判斷上述直接記憶體存取控制器是否傳送完使用者資料;於上述接收資料觸發階段,為反應上述簡單寫命令、上述包裹寫命令中上述包的使用者資料、或上述命令佇列中的一寫入工作,啟動上述前端介面中的上述直接記憶體存取控制器開始於上述資料線上從上述主機端接收使用者資料;以及於上述接收資料等待階段,為反應上述簡單寫命令、上述包裹寫命令中上述包的使用者資料、或上述命令佇列中的上述寫入工作,週期性檢查上述前端介面中的一接收計數器,用來判斷上述直接記憶體存取控制器是否接收完使用者資料。
- 如請求項15所述的主機輸出入命令的執行裝置,其中,上述階段包含一回覆管理階段,上述處理單元於上述直接記憶體存取控制器傳送完使用者資料後的上述回覆管理階段,為反應上述簡單寫命令、上述包裹寫命令中上述包的使用者資料、或上述命令佇列中的上述寫入工作,驅動上述前端介面將上述資料線中的一條拉低一段時間,用於執行寫入操作,並且於上述寫入操作完成後,釋放上述資料線。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201962872372P | 2019-07-10 | 2019-07-10 | |
| US62/872,372 | 2019-07-10 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TW202102974A TW202102974A (zh) | 2021-01-16 |
| TWI730454B true TWI730454B (zh) | 2021-06-11 |
Family
ID=74047273
Family Applications (3)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW108137284A TWI715248B (zh) | 2019-07-10 | 2019-10-16 | 主機輸出入命令的執行裝置及方法及電腦程式產品 |
| TW108137240A TWI730454B (zh) | 2019-07-10 | 2019-10-16 | 主機輸出入命令的執行裝置及方法及電腦程式產品 |
| TW108137255A TWI734220B (zh) | 2019-07-10 | 2019-10-16 | 主機輸出入命令的執行裝置及方法及電腦程式產品 |
Family Applications Before (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW108137284A TWI715248B (zh) | 2019-07-10 | 2019-10-16 | 主機輸出入命令的執行裝置及方法及電腦程式產品 |
Family Applications After (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW108137255A TWI734220B (zh) | 2019-07-10 | 2019-10-16 | 主機輸出入命令的執行裝置及方法及電腦程式產品 |
Country Status (3)
| Country | Link |
|---|---|
| US (4) | US11086805B2 (zh) |
| CN (3) | CN112214240B (zh) |
| TW (3) | TWI715248B (zh) |
Families Citing this family (11)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US10521387B2 (en) * | 2014-02-07 | 2019-12-31 | Toshiba Memory Corporation | NAND switch |
| TWI715248B (zh) * | 2019-07-10 | 2021-01-01 | 慧榮科技股份有限公司 | 主機輸出入命令的執行裝置及方法及電腦程式產品 |
| US11429545B2 (en) * | 2020-07-16 | 2022-08-30 | Silicon Motion, Inc. | Method and apparatus for data reads in host performance acceleration mode |
| US12443436B2 (en) | 2020-09-02 | 2025-10-14 | Samsung Electronics Co., Ltd. | Systems and method for batching requests in computational devices |
| US12393432B2 (en) | 2020-09-02 | 2025-08-19 | Samsung Electronics Co., Ltd. | Mechanism to discover computational storage functions and devices |
| US12399639B2 (en) | 2021-01-27 | 2025-08-26 | Samsung Electronics Co., Ltd. | Systems and methods for data transfer for computational storage devices |
| EP4036725A1 (en) * | 2021-01-27 | 2022-08-03 | Samsung Electronics Co., Ltd. | Systems and methods for data transfer for computational storage devices |
| US12423117B2 (en) | 2021-06-03 | 2025-09-23 | Samsung Electronics Co., Ltd. | Plugin framework mechanism to manage computational storage devices |
| US12073114B2 (en) * | 2021-09-30 | 2024-08-27 | Advanced Micro Devices, Inc. | Stacked command queue |
| KR20230058230A (ko) * | 2021-10-22 | 2023-05-03 | 삼성전자주식회사 | 스토리지 장치 및 그 동작 방법 |
| CN118760474B (zh) * | 2024-09-05 | 2025-01-07 | 合肥康芯威存储技术有限公司 | 一种电子存储设备及其数据传输方法 |
Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| TW200604827A (en) * | 2004-07-19 | 2006-02-01 | Infortrend Technology Inc | IO-stream adaptive write caching policy adjustment |
| US7840719B2 (en) * | 2006-10-10 | 2010-11-23 | International Business Machines Corporation | System and program products for facilitating input/output processing by using transport control words to reduce input/output communications |
| US9176672B2 (en) * | 2011-10-06 | 2015-11-03 | Marvell International Ltd. | Input/output (I/O) command aggregation |
| TW201915736A (zh) * | 2017-09-26 | 2019-04-16 | 慧榮科技股份有限公司 | 主動錯誤更正失敗處理方法 |
Family Cites Families (61)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4694391A (en) * | 1980-11-24 | 1987-09-15 | Texas Instruments Incorporated | Compressed control decoder for microprocessor system |
| US4430707A (en) * | 1981-03-05 | 1984-02-07 | Burroughs Corporation | Microprogrammed digital data processing system employing multi-phase subroutine control for concurrently executing tasks |
| US5247654A (en) * | 1989-05-19 | 1993-09-21 | Compaq Computer Corporation | Minimum reset time hold circuit for delaying the completion of a second and complementary operation |
| US5148535A (en) * | 1989-08-31 | 1992-09-15 | Tandy Corporation | Non-bus request refresh system for shortening refresh timing |
| EP0685803B1 (en) * | 1994-06-03 | 2001-04-18 | Hyundai Electronics America | Method of producing an electrical device adapter |
| DE69924475T2 (de) * | 1999-06-09 | 2006-02-16 | Texas Instruments Inc., Dallas | Multikanal-DMA mit Datenverkehrplanung auf die Ausgänge |
| US8341332B2 (en) | 2003-12-02 | 2012-12-25 | Super Talent Electronics, Inc. | Multi-level controller with smart storage transfer manager for interleaving multiple single-chip flash memory devices |
| US7676640B2 (en) * | 2000-01-06 | 2010-03-09 | Super Talent Electronics, Inc. | Flash memory controller controlling various flash memory cells |
| US6871341B1 (en) * | 2000-03-24 | 2005-03-22 | Intel Corporation | Adaptive scheduling of function cells in dynamic reconfigurable logic |
| US6584513B1 (en) * | 2000-03-31 | 2003-06-24 | Emc Corporation | Direct memory access (DMA) transmitter |
| US7032228B1 (en) * | 2001-03-01 | 2006-04-18 | Emc Corporation | Common device interface |
| EP1303097A3 (en) * | 2001-10-16 | 2005-11-30 | Microsoft Corporation | Virtual distributed security system |
| US8176238B2 (en) * | 2003-12-02 | 2012-05-08 | Super Talent Electronics, Inc. | Command queuing smart storage transfer manager for striping data to raw-NAND flash modules |
| TW200622634A (en) * | 2004-12-31 | 2006-07-01 | Inventec Appliances Corp | System for processing data in NAND flash memory and method thereof |
| CN100396065C (zh) * | 2005-01-14 | 2008-06-18 | 清华大学 | 一种iSCSI存储系统的实现方法 |
| JP2007115293A (ja) * | 2005-10-17 | 2007-05-10 | Toshiba Corp | 情報記憶媒体、プログラム、情報再生方法、情報再生装置、データ転送方法、及びデータ処理方法 |
| JP2007207328A (ja) * | 2006-01-31 | 2007-08-16 | Toshiba Corp | 情報記憶媒体、プログラム、情報再生方法、情報再生装置、データ転送方法、及びデータ処理方法 |
| EP1936907A1 (en) * | 2006-12-12 | 2008-06-25 | The Sporting Exchange Ltd. | Transaction processing system |
| US20080154950A1 (en) * | 2006-12-21 | 2008-06-26 | Sap Ag | Object constructors for generic frameworks |
| US8095847B2 (en) * | 2008-02-14 | 2012-01-10 | International Business Machines Corporation | Exception condition handling at a channel subsystem in an I/O processing system |
| US20100281224A1 (en) | 2009-05-01 | 2010-11-04 | International Buisness Machines Corporation | Prefetching content from incoming messages |
| US8510494B2 (en) * | 2009-12-24 | 2013-08-13 | St-Ericsson Sa | USB 3.0 support in mobile platform with USB 2.0 interface |
| US8782336B2 (en) * | 2010-05-11 | 2014-07-15 | Marvell World Trade Ltd. | Hybrid storage system with control module embedded solid-state memory |
| KR101694804B1 (ko) * | 2010-08-16 | 2017-01-11 | 삼성전자주식회사 | 메모리 장치 및 이를 포함하는 메모리 시스템 |
| US8660989B2 (en) * | 2010-08-27 | 2014-02-25 | Sap Ag | Generic framework for application specific data exchange |
| US9465728B2 (en) * | 2010-11-03 | 2016-10-11 | Nvidia Corporation | Memory controller adaptable to multiple memory devices |
| KR20120074897A (ko) * | 2010-12-28 | 2012-07-06 | 에스케이하이닉스 주식회사 | 모드레지스터세트를 구비하는 반도체 메모리 장치 |
| WO2012109677A2 (en) * | 2011-02-11 | 2012-08-16 | Fusion-Io, Inc. | Apparatus, system, and method for managing operations for data storage media |
| US9071364B1 (en) * | 2011-10-18 | 2015-06-30 | Clariphy Communications, Inc. | Coherent optical transceiver with programmable application modes |
| TWI526838B (zh) * | 2013-02-27 | 2016-03-21 | 東芝股份有限公司 | 記憶體裝置 |
| US10372551B2 (en) * | 2013-03-15 | 2019-08-06 | Netlist, Inc. | Hybrid memory system with configurable error thresholds and failure analysis capability |
| CN104102600B (zh) * | 2013-04-03 | 2018-01-12 | 慧荣科技股份有限公司 | 存储器控制器 |
| US9329931B2 (en) * | 2013-07-24 | 2016-05-03 | Seagate Technology Llc | Solid state drive emergency pre-boot application providing expanded data recovery function |
| US9418168B2 (en) * | 2013-10-29 | 2016-08-16 | Sap Se | Providing cloud-based, generic OData mashup services using an on-demand service |
| KR102111741B1 (ko) * | 2014-01-10 | 2020-05-15 | 삼성전자주식회사 | 임베디드 멀티미디어 카드 및 이의 동작 방법 |
| US9678787B2 (en) * | 2014-05-23 | 2017-06-13 | Microsoft Technology Licensing, Llc | Framework for authoring data loaders and data savers |
| TWI512609B (zh) * | 2014-09-05 | 2015-12-11 | Silicon Motion Inc | 讀取命令排程方法以及使用該方法的裝置 |
| US9251891B1 (en) * | 2014-11-11 | 2016-02-02 | Sandisk Technologies Inc. | Devices and methods to conditionally send parameter values to non-volatile memory |
| US10114789B2 (en) * | 2015-01-08 | 2018-10-30 | Samsung Electronics Co., Ltd. | System on chip for packetizing multiple bytes and data processing system including the same |
| KR102398213B1 (ko) * | 2015-03-09 | 2022-05-17 | 삼성전자주식회사 | 저장 장치, 그것을 포함하는 호스트 시스템, 및 그것의 맵 테이블 업데이트 방법 |
| KR20160118602A (ko) * | 2015-04-02 | 2016-10-12 | 삼성전자주식회사 | 데이터 저장 장치와 이를 포함하는 장치들 |
| JP6398102B2 (ja) * | 2015-05-29 | 2018-10-03 | 東芝メモリ株式会社 | メモリシステム |
| US10282324B2 (en) | 2015-07-13 | 2019-05-07 | Samsung Electronics Co., Ltd. | Smart I/O stream detection based on multiple attributes |
| US10656838B2 (en) | 2015-07-13 | 2020-05-19 | Samsung Electronics Co., Ltd. | Automatic stream detection and assignment algorithm |
| US10318193B2 (en) * | 2015-09-14 | 2019-06-11 | Sandisk Technologies Llc | Systems and methods of command authorization |
| TWI584127B (zh) * | 2015-12-28 | 2017-05-21 | 慧榮科技股份有限公司 | 電子裝置 |
| US9934173B1 (en) * | 2016-02-24 | 2018-04-03 | Xilinx, Inc. | Pseudo cut-through architecture between non-volatile memory storage and remote hosts over a fabric |
| KR102229013B1 (ko) * | 2016-09-02 | 2021-03-17 | 삼성전자주식회사 | 자동 스트림 검출 및 할당 알고리즘 |
| TWI602116B (zh) * | 2017-03-07 | 2017-10-11 | Silicon Motion Inc | 資料儲存裝置及其資料維護方法 |
| CN108932106B (zh) * | 2017-05-26 | 2021-07-02 | 上海宝存信息科技有限公司 | 固态硬盘访问方法以及使用该方法的装置 |
| CN109101185B (zh) * | 2017-06-20 | 2023-08-11 | 北京忆恒创源科技股份有限公司 | 固态存储设备及其写命令和读命令处理方法 |
| US11860812B2 (en) * | 2017-08-22 | 2024-01-02 | Intel Corporation | Serdes link training |
| CN109542335B (zh) * | 2017-09-22 | 2022-04-01 | 慧荣科技股份有限公司 | 快闪存储器的数据内部搬移方法以及使用该方法的装置 |
| CN117215824A (zh) * | 2017-09-28 | 2023-12-12 | 北京忆芯科技有限公司 | 基于机器学习的读出数据错误处理 |
| US10318179B1 (en) * | 2017-12-27 | 2019-06-11 | Nxp B.V. | Host device to embedded multi-media card device communication |
| CN109783474B (zh) * | 2019-01-08 | 2020-08-21 | 北京工业大学 | 虚拟可信根实例及其自身状态数据的安全迁移方法 |
| CN109918023A (zh) * | 2019-02-22 | 2019-06-21 | 深圳忆联信息系统有限公司 | 基于内存受限ssd的预读取方法、装置和计算机设备 |
| US11184170B2 (en) * | 2019-06-28 | 2021-11-23 | Micron Technology, Inc. | Public key protection techniques |
| TWI715248B (zh) * | 2019-07-10 | 2021-01-01 | 慧榮科技股份有限公司 | 主機輸出入命令的執行裝置及方法及電腦程式產品 |
| US11689648B2 (en) * | 2021-03-11 | 2023-06-27 | Xilinx, Inc. | Network interface device |
| US12342161B2 (en) * | 2021-08-24 | 2025-06-24 | Idmelon Technologies Inc. | System and method for forwarding authentication requests to a nearby authenticator |
-
2019
- 2019-10-16 TW TW108137284A patent/TWI715248B/zh active
- 2019-10-16 CN CN201910984259.7A patent/CN112214240B/zh active Active
- 2019-10-16 CN CN201910984087.3A patent/CN112214157B/zh active Active
- 2019-10-16 CN CN201910984351.3A patent/CN112214158B/zh active Active
- 2019-10-16 TW TW108137240A patent/TWI730454B/zh active
- 2019-10-16 TW TW108137255A patent/TWI734220B/zh active
-
2020
- 2020-04-21 US US16/854,652 patent/US11086805B2/en active Active
- 2020-04-21 US US16/854,413 patent/US11308007B2/en active Active
- 2020-04-21 US US16/854,065 patent/US10936513B2/en active Active
-
2021
- 2021-06-28 US US17/360,720 patent/US11977500B2/en active Active
Patent Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| TW200604827A (en) * | 2004-07-19 | 2006-02-01 | Infortrend Technology Inc | IO-stream adaptive write caching policy adjustment |
| US7840719B2 (en) * | 2006-10-10 | 2010-11-23 | International Business Machines Corporation | System and program products for facilitating input/output processing by using transport control words to reduce input/output communications |
| US9176672B2 (en) * | 2011-10-06 | 2015-11-03 | Marvell International Ltd. | Input/output (I/O) command aggregation |
| TW201915736A (zh) * | 2017-09-26 | 2019-04-16 | 慧榮科技股份有限公司 | 主動錯誤更正失敗處理方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN112214158A (zh) | 2021-01-12 |
| TWI734220B (zh) | 2021-07-21 |
| US20210011862A1 (en) | 2021-01-14 |
| CN112214240B (zh) | 2024-05-31 |
| CN112214158B (zh) | 2024-03-22 |
| US10936513B2 (en) | 2021-03-02 |
| TW202102974A (zh) | 2021-01-16 |
| CN112214157A (zh) | 2021-01-12 |
| US11308007B2 (en) | 2022-04-19 |
| US20210011723A1 (en) | 2021-01-14 |
| US20210011861A1 (en) | 2021-01-14 |
| US11086805B2 (en) | 2021-08-10 |
| TW202102975A (zh) | 2021-01-16 |
| CN112214240A (zh) | 2021-01-12 |
| US20210326278A1 (en) | 2021-10-21 |
| US11977500B2 (en) | 2024-05-07 |
| CN112214157B (zh) | 2023-11-03 |
| TW202102976A (zh) | 2021-01-16 |
| TWI715248B (zh) | 2021-01-01 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| TWI730454B (zh) | 主機輸出入命令的執行裝置及方法及電腦程式產品 | |
| US11385831B2 (en) | Memory controller and storage device including the same | |
| US9395921B2 (en) | Writing data using DMA by specifying a buffer address and a flash memory address | |
| US9734085B2 (en) | DMA transmission method and system thereof | |
| CN108153482B (zh) | Io命令处理方法与介质接口控制器 | |
| US10585822B2 (en) | Operation method of host system including storage device and operation method of storage device controller | |
| CN111108488B (zh) | 内存块回收方法和装置 | |
| US11150809B2 (en) | Memory controller and storage device including the same | |
| US10394727B2 (en) | Semiconductor memory device with data buffering | |
| CN110865952B (zh) | 利用缓存优化dma传输 | |
| KR102835930B1 (ko) | 저장 장치 및 저장 장치 시스템과 그 동작 방법 | |
| TWI906638B (zh) | 記憶體系統及其執行方法、控制器以及記憶體裝置 | |
| TWI835027B (zh) | 更新主機與閃存位址對照表的方法及電腦程式產品及裝置 | |
| US10228883B2 (en) | Storage device that postpones completion of read command to begin execution of a non-read command | |
| US20240168876A1 (en) | Solving submission queue entry overflow using metadata or data pointers | |
| US20240264946A1 (en) | Memory controller, method of driving memory controller, and memory system | |
| KR20230063857A (ko) | 스토리지 장치 및 전자 장치 | |
| CN119229913A (zh) | NVMe控制器的NVMe读IO发起电路 | |
| CN121455405A (zh) | 数据写入方法、装置、设备、存储介质及计算机程序产品 | |
| CN121301255A (zh) | 一种控制器、主机、控制器的操作方法及主机的操作方法 |