KR20140010999A - 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리 - Google Patents

호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리 Download PDF

Info

Publication number
KR20140010999A
KR20140010999A KR1020137034919A KR20137034919A KR20140010999A KR 20140010999 A KR20140010999 A KR 20140010999A KR 1020137034919 A KR1020137034919 A KR 1020137034919A KR 20137034919 A KR20137034919 A KR 20137034919A KR 20140010999 A KR20140010999 A KR 20140010999A
Authority
KR
South Korea
Prior art keywords
firmware
command type
modification identifier
computing host
host
Prior art date
Application number
KR1020137034919A
Other languages
English (en)
Other versions
KR101466560B1 (ko
Inventor
로스 스텐포트
키쓰 맥케이
Original Assignee
엘에스아이 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 엘에스아이 코포레이션 filed Critical 엘에스아이 코포레이션
Publication of KR20140010999A publication Critical patent/KR20140010999A/ko
Application granted granted Critical
Publication of KR101466560B1 publication Critical patent/KR101466560B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/654Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/22Microcontrol or microprogram arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

컴퓨팅 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리는 OS가 복구불가능한 에러 및 “정지”에 직면하는 가시성에서의 지연없는 컨텍스트에서와 같이, 예를 들어, 펌웨어 업데이트의 효과들의 적어도 일부의 가시성을 지연시키는 것을 통해 디바이스 펌웨어 업데이트에 걸쳐 호스트상에서 OS를 연속적으로 구동하는 것을 인에이블한다. 예를 들어, 디바이스(예를 들어, SSD)가 윈도우의 비변경 버전을 구동하는 컴퓨팅 호스트에 커플링된다. 디바이스상의 펌웨어는 예를 들어, 부팅함으로써 업데이트되고/활성화된다. (업데이트된 펌웨어의 활성화시에) OS에 즉시 보이게 되는 정보의 일부의 가시성은, 디바이스의 전력 사이클 전까지 지연된다. 일부가 예를 들어, 펌웨어 수정 식별자를 포함하는 경우에, 지연된 가시성은 OS를 재부팅하지 않고 펌웨어 업데이트/활성화에 걸쳐 OS를 연속적으로 구동하는 것을 인에이블한다.

Description

호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리{MANAGEMENT OF DEVICE FIRMWARE UPDATE EFFECTS AS SEEN BY A HOST}
관련 출원들의 상호 참조
[0001] 본 출원에 대한 우선권 이익 주장은 (임의의 경우, 적절한 것으로서) 첨부하는 출원 데이터 시트(Data Sheet), 리퀘스트(Request) 또는 트랜스미탈(Transmittal)에서 이루어진다. 본 출원(instant application)의 타입에 의해 허용되는 범위로, 본 출원은 모든 목적들을 위해 하기 출원들을 인용에 의해 통합하며, 이들 모두는 발명이 구성된 시점에 본 출원으로 공동으로 소유되었다:
2011년 6월 7일 출원되고, 제 1 발명자 이름이 Ross John STENFORT이며, MANAGEMENT OF DEVICE FIRMWARE UPDATE EFFECTS AS SEEN BY A HOST이란 명칭의 미국 가출원 (대리인 사건 번호 SF-11-12 및 출원 번호 61/494,262).
[0002] 분야: 스토리지 기술에서의 진보들은 성능, 효율성 및 사용의 유용성에서의 개선들을 제공하기 위해 요구된다.
[0003] 관련된 기술: 공개적으로 또는 잘 알려진 것으로 명시적으로 식별되지 않는 한, 맥락, 정의들 또는 비교 목적들에 대한 것을 비롯하여, 기술들 및 개념들에 대한 본원에서의 언급은, 그와 같은 기술들 및 개념들이 이전에 공개적으로 알려지거나 그렇지 않으면 종래 기술의 일부라는 것에 대한 승인으로서 해석되어서는 안 된다. 이로써, 특허들, 특허 출원들 및 공개공보들을 비롯하여 (만약 있다면) 본원에 인용된 모든 참조들은 구체적으로 통합되든지 아니든지 간에, 모든 목적들을 위해, 그 전체들이 인용에 의해 통합된다.
개요
[0004] 본 발명은 수많은 방식들, 예를 들어, 프로세스, 제조 물건, 장치, 시스템, 물질의 조성 및 컴퓨터 판독가능한 스토리지 매체(예를 들어, 플래시 스토리지와 같은 비휘발성 스토리지를 갖는 집적 회로, 디스크와 같은 광학 및/또는 자기 대용량 스토리지 디바이스에서의 매체)와 같은 컴퓨터 판독가능한 매체, 또는 프로그램 명령들이 광학 또는 전자 통신 링크들을 통해 송신되는 컴퓨터 네트워크로서 구현될 수 있다. 상세한 설명은, 위에서 식별된 분야에서의 비용, 수익성, 성능, 효율성 및 이용 활용성에서의 개선들을 가능하게 하는 본 발명의 하나 또는 그 초과의 실시예들의 설명을 제공한다. 상세한 설명은 상세한 설명의 나머지 부분의 이해를 용이하게 하기 위한 도입부를 포함한다. 도입부는 본원에 설명된 개념들에 따른 시스템들, 방법들, 제조 물건들 및 컴퓨터 판독가능한 매체 중 하나 또는 그 초과의 것의 예시적인 실시예들을 포함한다. 결론들에서 더 상세하게 논의되는 바와 같이, 본 발명은 발행된 청구항들의 범위 내에서 모든 가능한 수정들 및 변형들을 포괄한다.
[0005] 도 1a는 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리를 제공하는 고체 상태 디스크(SSD)를 포함하는 SSD의 실시예의 선택된 상세사항들을 예시한다.
[0006] 도 1b는 도 1a의 SSD를 포함하는 시스템의 실시예의 선택된 상세사항들을 예시한다.
[0007] 도 1c는 도 1a의 SSD를 포함하는 시스템의 다른 실시예의 선택된 상세사항들을 예시한다.
[0008] 도 2는 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리의 실시예의 선택된 상세사항들의 흐름도를 예시한다.
[0009] 도 3은 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리의 다른 실시예의 선택된 상세사항들의 흐름도를 예시한다.
도면들에서 참조 부호들의 리스트
[0010]
Figure pct00001

Figure pct00002
[0011] 본 발명의 하나 또는 그 초과의 실시예들의 상세한 설명이 본 발명의 선택된 상세사항들을 예시하는 첨부한 도면들과 함께 아래에 제공된다. 본 발명은 실시예들과 관련하여 설명된다. 여기에서의 실시예들은 단지 예시적인 것으로 이해되고, 본 발명은 명백하게, 여기에서의 실시예들 중 임의의 실시예들 또는 이들 모두로 또는 이들에 의해 제한되지 않으며, 본 발명은 다수의 대안들, 변경, 및 등가물들을 포괄한다. 설명의 단조로움을 회피하기 위해, 다양한 단어 라벨(word label)들(제 1, 최종, 특정한, 다양한, 추가의, 다른, 특히, 선택, 일부, 및 주목할만한을 포함하지만 이로 제한되지 않음)이 실시예들의 개별 세트들에 적용될 수도 있고; 여기에서 사용되는 바와 같이, 이러한 라벨들은 명백하게 품질, 또는 임의의 형태의 우선순위 또는 편견을 전달하는 것으로 뜻하는 것이 아니라, 단지 개별 세트들 사이를 편리하게 구별하기 위한 것이다. 개시된 프로세스들의 일부 동작들의 순서는 본 발명의 범위내에서 변경가능하다. 다수의 실시예들이 프로세스, 방법 및/또는 프로그램 명령 특징들에서 변동들을 설명하는 역할을 하는 경우에, 다른 실시예들은, 사전결정되거나 동적으로 결정된 기준에 따라 복수의 다수의 실시예들에 각각 대응하는 복수의 동작의 모드들 중 하나의 정적 및/또는 동적 선택을 수행한다는 것이 고려된다. 다수의 특정한 상세사항들은 본 발명의 완전한 이해를 제공하기 위해 아래의 설명에 설명된다. 상세사항들은 예시를 목적으로 제공되고 본 발명은 상세사항들 중 일부 또는 모두 없이 청구항들에 따라 실시될 수도 있다. 명확성을 목적으로, 본 발명에 관련된 기술 분야에 공지된 기술적 자료는 본 발명이 필요없이 모호해지지 않도록 상세히 설명하지 않는다.
도입부
[0012] 이러한 도입부는 단지 상세한 설명의 더욱 빠른 이해를 용이하게 하기 위해 포함되고; 임의의 도입부의 단락들이 반드시 전체 주제에 대한 축약된 관점이고 철저한 또는 제한적인 설명인 것을 뜻하지 않기 때문에, 본 발명은 (만약 있다면, 명백한 예들을 포함하는) 도입부에 제공되는 개념들로 제한되지 않는다. 예를 들어, 다음의 도입부는 특정한 실시예들에 대해서만 공간 및 구조화에 의해 제한된 개요 정보를 제공한다. 청구항들이 명세서의 나머지 부분 전반에 걸쳐 궁극적으로 도시되고 논의되는 것들을 비롯하여, 다수의 다른 실시예들이 제공된다.
약어들
[0013] 여기에 정의된 다양한 축약된 약어들(예를 들어, 두문자어들)의 적어도 일부가 여기에 사용된 특정한 엘리먼트들을 지칭한다.
Figure pct00003
[0014] 컴퓨팅 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리는 OS가 복구불가능한 에러 및 "정지(crash)"에 직면하는 가시성에서의 지연없는 컨텍스트에서와 같이, 예를 들어, 펌웨어 업데이트의 효과들의 적어도 일부의 가시성을 지연시키는 것을 통해 디바이스 펌웨어 업데이트에 걸쳐 호스트상에서 OS를 연속적으로 구동하는 것을 인에이블한다. 예를 들어, 디바이스(예를 들어, SATA-호환가능한 SSD)가 윈도우의 비변경 버전을 구동하는 컴퓨팅 호스트에 커플링된다. 디바이스상의 펌웨어는 예를 들어, 부팅되고/되거나 실행 펌웨어에 액세스가능하게 이루어진 하나 또는 그 초과의 라이브러리들 및/또는 테이블들에 의해 업데이트되고 활성화된다. (업데이트된 펌웨어의 활성화시에) OS에 즉시 보이게 되는 정보의 일부의 가시성은, 디바이스의 전력 사이클 전까지 지연된다. 일부가 예를 들어, 펌웨어 수정 식별자를 포함하는 경우에, 지연된 가시성은 OS를 재부팅하지 않고 펌웨어 업데이트/활성화에 걸쳐 OS를 연속적으로 구동하는 것을 인에이블한다.
[0015] 디바이스의 펌웨어는 업데이트되고, 펌웨어 업데이트의 하나 또는 그 초과의 효과들은 예를 들어, 호스트상에서 구동하고 디바이스에 액세스하는 OS에 업데이트의 효과들 중 적어도 일부의 가시성을 지연시키는 것을 통해 컴퓨팅 호스트가 볼 때 옵션으로 관리된다. 지연은 가시성 지연을 종료하는 특정한 이벤트가 발생할 때까지 계속된다. 특정한 이벤트의 예들은, 디바이스가 전력 사이클링되고(예를 들어, 전력의 제거 후 재인가), 디바이스 중 모두 또는 임의의 부분들이 하나의 전력 모드로부터 다른 전력 모드로 천이하고 (예를 들어, 슬립 모드 또는 PHY 전력 관리 모드를 빠져나옴), 디바이스가 판매자 특정 커맨드를 수신하고, 디바이스가 펌웨어 업데이트의 일부로서 특정한 파라미터 및/또는 코드를 수신하고, 링크의 리셋이 디바이스를 호스트에 커플링하는 것이다. (예를 들어, 커맨드를 통해 호스트에 의해 디바이스에 액세스가능한) 디바이스의 모드 정보는 상술한 예시적인 이벤트 중 어느 것이 가시성의 지연을 종료시키는 이벤트들에 대응하는지를 옵션으로 선택적으로 결정한다.
[0016] 예를 들어, 디바이스는 업데이트된 펌웨어를 갖는 제어기를 갖는 SATA 호환가능한 SSD이다. 펌웨어 수정 식별자를 제공하는 업데이트의 일부의 가시성은 SSD가 전력 사이클링될 때까지 지연된다. 따라서, 디바이스가 전력 사이클링될 때까지는, OS에게는, SSD가 적어도 펌웨어 수정 식별자에 관하여, 업데이트 이전의 펌웨어로 동작하는 것으로 나타난다. OS가 윈도우의 특정한 버전들(예를 들어, 95, 98, ME, NT, XP, 2000, Server, Vista, 및 7) 중 하나인 경우에, 일부 실시예들 및/또는 사용 시나리오들에서, 업데이트된 펌웨어 수정 식별자의 가시성을 지연시키는 것은, OS가 재부팅 및/또는 전력 사이클없이 (예를 들어, 사용자 애플리케이션들을) 계속 구동하는 것을 불가능하게 만드는 복구불가능한 에러에 OS가 직면하는 것을 방지한다. 펌웨어 수정 식별자는 예를 들어, 디바이스의 VPD 데이터를 리턴하는 SATA '확인(IDENTIFY)' 커맨드에 응답하여, 또는 다르게는, SCSI/SAS 판독 VPD 커맨드에 응답하여 OS에 가시적이다. 예를 들어, SATA 컨텍스트에서, 펌웨어 수정 식별자는 Identify Device Data Words 23-26에 포함된다. 다른 예에 있어서, SCSI 컨텍스트에서, 펌웨어 수정 식별자는 제품 수정 레벨 엔트리에서와 같이, Device Constituents VPD 페이지에 포함된다.
[0017] 펌웨어 업데이트 효과들의 적어도 일부의 가시성을 지연시키는 것은 예를 들어, 확인 및/또는 식별(identify and/or identification) 정보에서의 하나 또는 그 초과의 변화들의 가시성을 지연시키는 것에 대응한다. 디바이스(예를 들어, 스토리지 디바이스)의 펌웨어는 (예를 들어, 업데이트된 펌웨어를 부팅하는 스토리지 디바이스의 제어기를 통해) 업데이트되고 활성화되며, 컴퓨팅 호스트(예를 들어, 윈도우즈와 같은 OS를 구동하는 컴퓨터)에 확인 및/또는 식별 정보를 리턴하기 위해 참조되는 확인/식별 데이터 구조(들) 중 모두 또는 임의의 부분들이 펌웨어 업데이트 이전의 펌웨어에 대응하는 상태로 유지된다. 제어기는 가시성의 지연을 종료하는 이벤트가 제어기(또는 제어기에 제공된 통지)에 의해 검출될 때까지 유지된 상태들에서 유지된 확인/식별 데이터 구조(들)에서 값들을 보유한다. 이벤트 이후에, 제어기는 업데이트된 펌웨어를 부팅하지만, 확인/식별 데이터 구조(들)를 더 이상 유지하지 않고, 대신에, 업데이트된 펌웨어에 따라 신규 확인/식별 데이터 구조(들)를 구축한다.
[0018] 확인 및/또는 식별 정보는 식별 정보, 동작 파라미터들, 및 펌웨어의 버전들, 제품들, 제품 라인들, 및 그것의 특정한 인스턴스들 사이에서 변하는 다른 정보 중 모두 또는 임의의 부분들의 임의의 조합을 포함한다. 식별 정보의 예들이 펌웨어 수정 식별자, 펌웨어 수정 번호, 및 특정한 SSD 또는 그것을 이용하는 제품의 식별이다. 식별 정보의 추가의 예들이 특정한 인스턴스에 고유한 레퍼런스(예를 들어, 일련 번호), 인스턴스들의 특정한 클래스에 고유한 레퍼런스(예를 들어, 수정 식별자/레벨 또는 제품 ID), 및 특정한 제조자/회사에 고유한 레퍼런스(예를 들어, 판매자 ID)이다. 동작 파라미터들의 예들은 별도로 유지되지 않으면, COMINIT/COMRESET 커맨드들, 펌웨어 업데이트, 링크 리셋, PHY 전력 관리 모드 천이, 및/또는 전력 사이클에 걸친 SSP 파라미터들과 같은 SSP에 영향을 받는 하나 또는 그 초과의 파라미터들을 포함한다.
[0019] 확인/식별 데이터 구조(들)는 여러 기법들 중 하나 또는 임의의 조합을 통해 유지된다. 제 1 예시적인 기법에 있어서, 제어기는 예를 들어, 가시성의 지연을 종료하는 이벤트가 있을 때까지 부팅하는 동안 데이터 구조(들)에 할당된 스토리지 위치(들)의 변경의 방지, 또는 가시성의 지연을 종료하는 이벤트와 연관되는 부팅 동안에만 스토리지 위치(들)의 변경의 인에이블링을 통해 변경으로부터 확인/식별 데이터 구조(들)를 보호한다. 옵션으로, 확인/식별 데이터 구조(들)에 저장되는 정보는 예를 들어, (VPD 영역에서의 하나 또는 그 초과의 판매자 특정 필드들과 같은) 판매자 특정 데이터 구조에 대응하는 다른 데이터 구조(들)에 저장된다.
[0020] 제 2 예시적인 기법에 있어서, 호스트상의 드라이버와 함께 동작하는 제어기는 확인/식별 데이터 구조(들)로부터의 정보를 신규 펌웨어가 다운로딩되고, 활성화되고/되거나 부팅되기 이전에 드라이버에 제공한다. (가시성의 지연을 종료하는 이벤트없이) 신규 펌웨어를 다운로딩, 활성화, 및/또는 부팅하는 것의 일부로서, 드라이버는 이전에 제공된 확인/식별 데이터 구조(들) 정보를 제어기에 공급하고, 제어기는 확인/식별 데이터 구조(들)에 할당된 스토리지 위치(들)를 공급된 정보로 파퓰레이팅(populate)한다.
[0021] 제 3 예시적인 기법에 있어서, 호스트상의 드라이버는 확인/식별 데이터 구조(들)를 파퓰레이팅하기 위한 디바이스에 대한 정보를 디바이스에 제공한다. 드라이버는 펌웨어 업데이트 이후 및 디바이스 응답들 이후에 파퓰레이팅된 데이터 구조(들)에 의존하는 호스트로부터의 임의의 커맨드에 정보를 공급한다. 예를 들어, 정보는 SSP에 영향을 받는 하나 또는 그 초과의 파라미터들에 대응한다.
[0022] 옵션으로, 임의의 상술한 기법들과 조합하여, 디바이스는 가시성의 지연을 종료하는 이벤트 이후에 확인/식별 데이터 구조(들)에서만 가시적이게 되는 정보를 호스트에 제공하도록 인에이블된다. 특정한 예로서, 스토리지 디바이스의 펌웨어는 펌웨어 수정 식별자의 유지로, 호스트의 지시하에서 업데이트된다. 따라서, 호스트상에서 실행하는 OS(예를 들어, 윈도우즈의 버전)에 의해 인지될 때 확인 프레임에 관하여, 펌웨어 수정 식별자는 펌웨어 업데이트에 걸쳐 변경되지 않고 유지되어, 재부팅 및/또는 전력 사이클없이 가시적이게 되는 신규 펌웨어 수정 식별자로 인해 복구불가능한 에러(예를 들어, "정지")로부터 OS를 보호한다. 펌웨어 업데이트 이후에, 호스트상에서 실행하는 에이전트(예를 들어, 애플리케이션 프로그램 또는 드라이버)는 스토리지 디바이스상의 펌웨어가 가장 최근의 버전인지를 결정하기 위한 체크를 수행한다. 에이전트는 특정한 커맨드(예를 들어, 판매자 특정 확인/식별 정보의 판독, 이 판독은 확인 프레임을 리턴하는 판독과는 상이함)를 스토리지 디바이스에 전송하고, 이에 응답하여, 스토리지 디바이스는 신규 펌웨어 수정 식별자를 제공한다. 그 후, 에이전트는 스토리지 디바이스가 가장 최근의 펌웨어를 갖는지를 결정하기 위해 신규 펌웨어 수정 식별자를 가장 최근의 펌웨어 수정 식별자와 비교한다.
[0023] 디바이스가 어느 펌웨어 버전을 구동하는지 결정하기 위해 에이전트가 전송하는 특정한 커맨드에 응답하여, 신규 펌웨어 식별자는 예를 들어, 펌웨어가 "신규(new)" 또는 "구형(old)"인지에 관계없이, 그리고 부팅이 가시성의 지연을 종료하는 이벤트와 연관되는지 여부에 관계없이 펌웨어가 부팅할 때 펌웨어의 버전에 대응하는 펌웨어 수정 식별자로 업데이트되는 "새도우(shadow)" VPD 영역으로부터 제공된다. 다르게는, 신규 펌웨어 수정 식별자는 펌웨어가 부팅할 때 펌웨어의 부팅 버전에 대응하는 펌웨어 수정 식별자로 기록된 "로그(log)"로부터 제공된다.
[0024] 옵션으로, 이전의 펌웨어 버전 식별자들은 새도우 VPD 영역에 저장된다. 또한 옵션으로, 디바이스에서의 (예를 들어, 커맨드를 통해 호스트에 의해 디바이스에 액세스가능한) 모드 정보는 새도우 VPD 영역이 가시성의 지연을 종료하는 이벤트시에 업데이트되는지를 선택적으로 결정한다. 예를 들어, 모드 정보는 전력 사이클시에 새도우 VPD 영역에 대한 업데이트들을 방지하도록 설정되어, 펌웨어 수정 식별자가 시스템에서 변경되지 않고 유지되게 할 수 있고, 여기서, 이러한 변경은 그렇지 않으면 에러를 발생시킨다. 새도우 VPD 영역은 스마트 로그(SMART Log) 및/또는 판매자 특정 커맨드와 같은 판매자 특정 메커니즘을 통해 옵션으로 액세스가능하다.
[0025] 상술한 특정한 예들이 펌웨어 수정 식별자에 관한 것이지만, 다른 실시예들은 유지된 확인/식별 정보 뿐만 아니라 유사한 방식으로 SSP에 영향을 받는 파라미터들, 및 더욱 일반적으로는, OS에 대한 지연된 가시성에 영향을 받는 펌웨어 업데이트의 임의의 부분들을 다룬다.
[0026] 옵션으로, 상술한 기법들 중 어느 하나 단독으로 또는 조합하여, 디바이스는 가장 최근의 펌웨어 업데이트 및/또는 하나 또는 그 초과의 이전의 펌웨어 업데이트들의 결과들을 저장한 후 호스트에 제공하도록 인에이블된다. 저장 및 제공은 예를 들어, 펌웨어의 하나 또는 그 초과의 이전의 버전들의 실행으로부터 확인/식별 정보에 액세스하고, (그렇지 않으면 가시성의 지연에 영향을 받는 SSP에 영향을 받는 하나 또는 그 초과의 파라미터들 및/또는 펌웨어 식별자와 같은) 펌웨어의 현재 버전의 실행으로부터 확인/식별 정보에 액세스하기 위해 펌웨어의 하나 또는 그 초과의 이전의 버전들로의 "롤링 백(rolling back)"을 인에이블한다.
[0027] 펌웨어 업데이트의 일례가 (예를 들어, 디바이스의 프로세서에 의해 펌웨어를 실행함으로써) 디바이스에 의해 사용된 펌웨어의 모두 또는 임의의 부분들이 신규 펌웨어로 대체된 후, 디바이스가 (예를 들어, 신규 펌웨어를 부팅한 후 실행함으로써 및/또는 실행 펌웨어에 액세스가능하게 이루어진 하나 또는 그 초과의 라이브러리 및/또는 테이블에 의해) 신규 펌웨어를 사용하여 기능할 때이다. 대체는 옵션으로, (예를 들어, 펌웨어를 저장하기 위해 사용된) 유지 펌웨어에 할당된 비휘발성(예를 들어, 플래시 메모리)의 (겹쳐)쓰기((over)writing)를 포함한다.
[0028] 일부 실시예들에서, NVM에서의 가변 사이즈 양자들의 압축된 데이터에 액세스하는 것은 일부 사용 시나리오들에서 개선된 스토리지 효율을 제공한다. 예를 들어, SSD 제어기는 (예를 들어, 디스크 기록 커맨드에 관하여) 컴퓨팅 호스트로부터 (압축해제된) 데이터를 수신하고, 데이터를 압축하며, 압축된 데이터를 플래시 메모리에 저장한다. (예를 들어, 디스크 판독 커맨드에 관한) 컴퓨팅 호스트로부터의 후속 요청에 응답하여, SSD 제어기는 플래시 메모리로부터의 압축된 데이터를 판독하고, 압축된 데이터를 압축해제하여, 압축해제된 데이터를 컴퓨팅 호스트에 제공한다. 압축된 데이터는 가변 사이즈 양자들에 따라 플래시 메모리에 저장되고, 양자들 사이즈는 예를 들어, 압축 알고리즘, 동작 모드, 및 다양한 데이터에 대한 압축 효율성으로 인해 변한다. SSD 제어기는 헤더(들)가 플래시 메모리에서 어디에 저장되는지를 결정하기 위해 포함된 맵 테이블을 컨설팅함으로써 부분적으로 데이터를 압축해제한다. SSD 제어기는 적절한 (압축된) 데이터가 플래시 메모리에서 어디에 저장되는지를 결정하기 위해 플래시 메모리로부터 획득된 헤더(들)를 분석한다. SSD 제어기는 압축해제된 데이터를 생성하여 컴퓨팅 호스트에 제공하기 위해 플래시 메모리로부터의 적절한 데이터를 압축해제한다. 본 출원에서, 압축해제(uncompress)(및 그것의 변형들)는 비압축(decompress)(및 그것의 변형들)과 동의어이다..
[0029] 다양한 실시예들에서, SSD 제어기는 컴퓨팅 호스트와 인터페이싱하기 위한 호스트 인터페이스, 플래시 메모리와 같은 NVM과 인터페이싱하기 위한 인터페이스, 및 인터페이스들을 제어하고 압축 및 압축해제뿐 아니라, 하위-레벨 에러 정정, 상위-레벨 에러 정정 및 독립적 실리콘 엘리먼트들을 통한 동적 상위-레벨 리던던시 모드 관리를 수행하기 위한 (그리고/또는 수행의 다양한 양상들을 제어하기 위한) 회로를 포함한다.
[0030] 다양한 실시예들에 따르면, 일부 호스트 인터페이스들은 USB 인터페이스 표준, CF 인터페이스 표준, MMC 인터페이스 표준, SD 인터페이스 표준, 메모리 스틱 인터페이스 표준, xD-픽처 카드 인터페이스 표준, IDE 인터페이스 표준, SATA 인터페이스 표준, SCSI 인터페이스 표준, SAS 인터페이스 표준, 및 PCIe 인터페이스 표준 중 하나 또는 그 초과와 호환가능하다. 다양한 실시예들에 따르면, 컴퓨팅 호스트는 컴퓨터, 워크스테이션 컴퓨터, 서버 컴퓨터, 스토리지 서버, PC, 랩탑 컴퓨터, 노트북 컴퓨터, 넷북 컴퓨터, PDA, 미디어 플레이어, 미디어 리코더, 디지털 카메라, 셀룰러 핸드셋, 코드리스 전화 핸드셋, 및 전자 게임 중 모두 또는 임의의 부분들이다. 일부 실시예들에서, (SAS/SATA 브리지와 같은) 인터페이싱 호스트는 컴퓨팅 호스트 및/또는 컴퓨팅 호스트에 대한 브리지로서 동작한다.
[0031] 다양한 실시예들에 따르면, 일부 SSD들은 HDD들, CD 드라이브들 및 DVD 드라이브들과 같은 자기 및/또는 광학 비휘발성 스토리지에 의해 이용되는 폼-팩터들, 전기적 인터페이스들 및/또는 프로토콜들과 호환가능하다. 다양한 실시예들에서, SSD들은 제로 또는 그 초과의 패리티 코드들, 제로 또는 그 초과의 RS 코드들, 제로 또는 그 초과의 BCH 코드들, 제로 또는 그 초과의 비터비(Viterbi) 또는 다른 트렐리스(trellis) 코드들 및 제로 또는 그 초과의 LDPC 코드들의 다양한 조합들을 이용한다.
예시적인 실시예들
[0032] 결론에서, "EC"들(예시적인 조합들)로서 명백하게 열거되는 적어도 일부를 포함하는 예시적인 실시예들의 집합이 따르는 상세한 설명에 대한 도입은 여기에 설명한 개념들에 따른 다양한 실시예 타입들의 추가의 설명을 제공하고, 이들 예들은 상호 배타적이고, 포괄적이거나, 제한적인 것으로 의미되지 않고, 본 발명은 이들 예시적인 실시예들에 제한되는 것이 아니라, 오히려 등록 청구항들의 범위내의 모든 가능한 변형물들 및 변동물들, 및 그들의 등가물들을 포함한다.
[0033] EC1) 방법으로서,
(a) 현재 선택 식별 정보와 연관된 현재 펌웨어에 따라 디바이스를 동작시키는 단계 - 단계 (a)의 동작은 디바이스와 통신하는 컴퓨팅 호스트에 현재 선택 식별 정보를 리턴하는 것을 포함함 -;
(b) 단계 (a) 이후에, 디바이스에서, 신규 선택 식별 정보와 연관된 신규 펌웨어를 수신하는 단계 - 신규 선택 식별 정보는 현재 선택 식별 정보의 각각의 엘리먼트들에 대응하는 하나 또는 그 초과의 엘리먼트들을 갖고, 신규 선택 식별 정보의 엘리먼트들 중 적어도 하나는 현재 선택 식별 정보의 대응하는 엘리먼트와는 상이한 값을 가짐 -;
(c) 단계 (b) 이후에, 신규 펌웨어에 따라 디바이스를 동작시키는 단계 - 단계 (c)의 동작은 컴퓨팅 호스트에 현재 선택 식별 정보를 리턴하는 것을 포함함 -; 및
(d) 단계 (b) 이후에 신규 선택 식별 정보의 가시성의 지연을 종료하는 이벤트에 응답하여, 신규 펌웨어에 따라 디바이스를 동작시키는 단계 - 단계 (d)의 동작은 컴퓨팅 호스트에 신규 선택 식별 정보를 리턴하는 것을 포함함 -;을 포함하는, 방법.
[0034] EC2) EC1에 있어서, 리턴하는 3개의 동작들은 직렬 어드밴스드 기술 부착(Serial Advanced Technology Attachment: SATA) 확인(IDENTIFY) 커맨드 타입의 각각의 인스턴스에 각각 응답하는, 방법.
[0035] EC3) EC1에 있어서, 리턴하는 3개의 동작들은 소형 컴퓨텅 시스템 인터페이스(Small Computer System Interface: SCSI) 판독 필수 제품 데이터(Vital Product Data: VPD) 커맨드 타입의 각각의 인스턴스에 각각 응답하는, 방법.
[0036] EC4) EC1에 있어서, 리턴하는 3개의 동작들은 컴퓨팅 호스트로부터의 하나 또는 그 초과의 커맨드 타입들 중 특정한 하나의 각각의 인스턴스에 각각 응답하고, 특정한 커맨드 타입은, 단계 (c)에서의 리턴하는 것이 신규 선택 식별 정보를 리턴하면, 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)이 복구불가능한 에러에 직면하는 것인, 방법.
[0037] EC5) EC4에 있어서, OS는 윈도우 OS의 버전을 포함하는, 방법.
[0038] EC6) EC4에 있어서, 특정한 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입을 포함하는, 방법.
[0039] EC7) EC4에 있어서, 특정한 커맨드 타입은 소형 컴퓨터 시스템 인터페이스(SCSI) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0040] EC8) EC4에 있어서, 특정한 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0041] EC9) EC1에 있어서,
신규 펌웨어는 제 1 신규 펌웨어이고, 신규 선택 식별 정보는 제 1 신규 선택 식별 정보이고, 방법은,
(e) 단계 (c) 이후에, 제 2 신규 선택 식별 정보와 연관된 제 2 신규 펌웨어를 수신하는 단계; 및
(f) 단계 (e) 이후에, 제 2 신규 펌웨어에 따라 디바이스를 동작시키는 단계 - 단계 (f)의 동작은 컴퓨팅 호스트에 현재 선택 식별 정보를 리턴하는 것을 포함함 -;를 더 포함하는, 방법.
[0042] EC10) EC9에 있어서, 리턴하는 3개의 동작들은 컴퓨팅 호스트로부터의 하나 또는 그 초과의 커맨드 타입들 중 특정한 하나의 각각의 인스턴스에 각각 응답하고, 특정한 커맨드 타입은, 단계 (f)에서의 리턴하는 것이 신규 선택 식별 정보를 리턴하면, 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)이 복구불가능한 에러에 직면하는 것인, 방법.
[0043] EC11) EC10에 있어서, 특정한 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입을 포함하는, 방법.
[0044] EC12) EC10에 있어서, 특정한 커맨드 타입은 소형 컴퓨터 시스템 인터페이스(SCSI) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0045] EC13) EC10에 있어서, 특정한 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0046] EC14) EC1에 있어서, 현재 식별 정보는 현재 다른 식별 정보와 결합한 현재 선택 식별 정보이고, 단계 (a)에서의 리턴하는 것은 현재 다른 식별 정보와 결합한 현재 선택 식별 정보를 리턴하는, 방법.
[0047] EC15) EC1에 있어서, 현재 식별 정보는 신규 다른 식별 정보와 결합한 신규 선택 식별 정보이고, 단계 (c)에서의 리턴하는 것은 현재 다른 식별 정보와 결합한 신규 선택 식별 정보를 리턴하는 것을 통해 현재 선택 식별 정보를 리턴하는, 방법.
[0048] EC16) EC1에 있어서,
현재 식별 정보는 현재 다른 식별 정보와 결합한 현재 선택 식별 정보이고, 단계 (a)의 리턴하는 것은 현재 다른 식별 정보와 결합한 현재 선택 식별 정보를 리턴하며,
신규 식별 정보는 신규 다른 식별 정보와 결합한 신규 선택 식별 정보이고, 신규 식별 정보는 현재 식별 정보의 각각의 엘리먼트들에 대응하는 하나 또는 그 초과의 엘리먼트들을 갖고, 신규 다른 식별 정보는 현재 다른 식별 정보의 각각의 엘리먼트들에 대응하는 하나 또는 그 초과의 엘리먼트들을 가지며, 단계 (c)의 리턴하는 것은 현재 다른 식별 정보와 결합한 신규 선택 식별 정보를 리턴하는 것을 통해 현재 선택 식별 정보를 리턴하는, 방법.
[0049] EC17) EC1에 있어서,
현재 펌웨어와 현재 선택 식별 정보 사이의 연관성을 형성하기 위해 현재 펌웨어의 적어도 일부를 실행하고/하거나 다운로딩하는 단계; 및
현재 펌웨어와 신규 선택 식별 정보 사이의 연관성을 형성하기 위해 신규 펌웨어의 적어도 일부를 실행하고/하거나 다운로딩하는 단계를 더 포함하는, 방법.
[0050] EC18) EC1에 있어서, 신규 선택 식별 정보의 가시성의 지연을 종료하는 이벤트는,
디바이스가 전력 사이클링되는 것;
디바이스 중 모두 또는 임의의 부분들이 일 전력 모드로부터 다른 전력 모드로 천이하는 것;
디바이스가 판매자 특정 커맨드를 수신하는 것;
디바이스가 펌웨어 업데이트의 일부로서 특정한 파라미터 및/또는 코드를 수신하는 것; 및
링크가 디바이스를 리셋된 호스트에 커플링하는 것 중 어느 하나 또는 그 초과를 포함하는, 방법.
[0051] EC19) EC1에 있어서,
현재 선택 식별 정보는 현재 펌웨어 수정 식별자이고;
신규 선택 식별 정보는 신규 펌웨어 수정 식별자이며;
리턴하는 3개의 동작들은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드의 인스턴스에 각각 응답하는, 방법.
[0052] EC20) EC1에 있어서,
현재 선택 식별 정보는 현재 펌웨어 수정 식별자이고;
신규 선택 식별 정보는 신규 펌웨어 수정 식별자이며;
리턴하는 3개의 동작들은 판독 필수 제품 데이터(VPD) 커맨드의 인스턴스에 각각 응답하는, 방법.
[0053] EC21) EC20에 있어서, 판독은 소형 컴퓨터 시스템 인터페이스(SCSI) 판독을 포함하는, 방법.
[0054] EC22) EC20에 있어서, 판독은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독을 포함하는, 방법.
[0055] EC23) EC1에 있어서,
현재 선택 식별 정보는 프로토콜 호환성 레벨이며;
신규 선택 식별 정보는 프로토콜 호환성 레벨인, 방법.
[0056] EC24) EC1에 있어서, 디바이스로부터 현재 선택 식별 정보를 수신하고/하거나 수신된 현재 선택 식별 정보를 디바이스에 제공하도록 컴퓨팅 호스트를 동작시키는 단계를 더 포함하는, 방법.
[0057] EC25) EC1에 있어서, 현재 선택 식별 정보의 적어도 일부를 하나 또는 그 초과의 비휘발성 메모리들에 저장하는 단계를 더 포함하는, 방법.
[0058] EC26) EC25에 있어서, SSD 제어기는 스토리지 인터페이스 표준과 호환가능한 스토리지 인터페이스를 포함하고, 컴퓨팅 호스트와 디바이스 사이의 통신은 스토리지 인터페이스를 통하는, 방법.
[0059] EC27) EC1에 있어서, 선택 식별 정보는 펌웨어 수정 식별자를 포함하는, 방법.
[0060] EC28) EC1에 있어서, 선택 식별 정보는 소프트웨어 세팅 보존(Software Settings Preservation: SSP)에 영향을 받는 하나 또는 그 초과의 파라미터들을 포함하는, 방법.
[0061] EC29) EC1에 있어서, 수신하는 단계는 신규 선택 식별 정보의 가시성의 지연을 종료하는 이벤트까지 현재 선택 식별 정보를 세이빙하는 단계를 포함하는, 방법.
[0062] EC30) EC1에 있어서, 수신하는 단계는 신규 선택 식별 정보의 가시성의 지연을 종료하는 이벤트까지 현재 선택 식별 정보를 보하는 단계를 포함하는, 방법.
[0063] EC31) EC1에 있어서, 신규 선택 식별 정보의 가시성의 지연을 종료하는 이벤트에 응답하여, 현재 선택 식별 정보를 변경으로부터 보호해제하는 단계를 더 포함하는, 방법.
[0064] EC32) EC1에 있어서, 수신하는 단계는 현재 선택 식별 정보를 컴퓨팅 호스트에 제공하는 단계 및 컴퓨팅 호스트로부터 현재 선택 식별 정보를 복원하는 단계를 포함하는, 방법.
[0065] EC33) EC1에 있어서, 수신하는 단계는 신규 펌웨어를 활성화시키는 단계를 포함하는, 방법.
[0066] EC34) EC1에 있어서, 디바이스는 스토리지 디바이스를 포함하는, 방법.
[0067] EC35) EC1에 있어서, 디바이스는 제어기를 포함하며, 동작하는 3개의 동작 및 수신하는 동작은 제어기에 의해 적어도 부분적으로 수행되는, 방법.
[0068] EC36) EC1에 있어서, 컴퓨팅 호스트와 디바이스 사이의 통신은 스토리지 인터페이스 표준과 호환가능한 스토리지 인터페이스를 통하는, 방법.
[0069] EC37) EC1에 있어서, 디바이스는 고체 상태 디스크(SSD)를 포함하는, 방법.
[0070] EC38) EC37에 있어서, SSD는 SSD 제어기를 포함하며, 동작하는 3개의 동작 및 수신하는 동작은 SSD 제어기에 의해 적어도 부분적으로 수행되는, 방법.
[0071] EC39) EC38에 있어서, SSD 제어기는 비휘발성 메모리 인터페이스를 포함하고, 저장된 부분의 스토리지는 비휘발성 메모리 인터페이스를 적어도 부분적으로 통하는, 방법.
[0072] EC40) EC38에 있어서, SSD는 하나 또는 그 초과의 비휘발성 메모리들을 포함하는, 방법.
[0073] EC41) EC40에 있어서, SSD 제어기는 비휘발성 메모리들과 인터페이싱하기 위한 비휘발성 메모리 인터페이스를 포함하는, 방법.
[0074] EC42) 방법으로서,
디바이스에서, 컴퓨팅 호스트로부터 제 1 펌웨어를 수신하는 단계;
디바이스에서, 컴퓨팅 호스트로부터 제 2 펌웨어를 수신하는 단계 - 제 2 펌웨어를 수신하는 단계는 제 1 펌웨어를 수신하는 단계 이후임 -;
제 2 펌웨어를 실행하면서, 컴퓨팅 호스트로부터의 특정한 커맨드 타입에 응답하여, 제 1 펌웨어와 제 2 펌웨어의 임의의 조합에 대한 액세스를 컴퓨팅 호스트에 제공하는 단계를 포함하는, 방법.
[0075] EC43) EC42에 있어서, 액세스는 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)에 식별 정보를 리턴하는 것을 포함하고, 식별 정보는 제 1 펌웨어의 실행에 의해 결정된 일부 정보 및 제 2 펌웨어의 실행에 의해 결정된 일부 정보를 포함하고, 제 1 펌웨어의 실행에 의해 결정된 일부 정보는, 제 2 펌웨어의 실행에 의해 결정된 대응하는 정보가 대신에 리턴되는 경우에, OS가 복구불가능한 에러에 직면하는 것인, 방법.
[0076] EC44) EC43에 있어서, OS는 윈도우 OS의 버전을 포함하는, 방법.
[0077] EC45) EC44에 있어서, 특정한 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입 또는 소형 컴퓨터 시스템 인터페이스(SCSI) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0078] EC46) EC42에 있어서, 액세스는 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)에 식별 정보를 리턴하는 것을 포함하고, 식별 정보는 제 1 펌웨어의 실행에 의해 결정된 일부 정보 및 제 2 펌웨어의 실행에 의해 결정된 일부 정보를 포함하고, 특정한 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입 또는 소형 컴퓨터 시스템 인터페이스(SCSI) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0079] EC47) EC46에 있어서, 제 1 펌웨어의 실행에 의해 결정된 정보는, 제 2 펌웨어의 실행에 의해 결정된 대응하는 정보가 대신에 리턴되는 경우에 OS가 복구불가능한 에러에 직면하는 것인, 방법.
[0080] EC48) EC47에 있어서, OS는 윈도우 OS의 버전을 포함하는, 방법.
[0081] EC49) EC42에 있어서, 액세스를 제공하는 단계는 디바이스로 하여금 액세스된 펌웨어에 따라 부팅하게 하는 단계를 포함하는, 방법.
[0082] EC50) EC42에 있어서, 액세스를 제공하는 단계는 액세스된 펌웨어의 펌웨어 이미지 중 모두 또는 임의의 부분들을 판독 및/또는 기록하는 단계를 포함하는, 방법.
[0083] EC51) EC42에 있어서, 액세스를 제공하는 단계는 액세스된 펌웨어 중 모두 또는 임의의 부분의 실행의 하나 또는 그 초과의 결과들 중 모두 또는 임의의 부분들을 판독 및/또는 기록하는 단계를 포함하는, 방법.
[0084] EC52) EC51에 있어서, 결과들은 필수 제품 데이터(VPD) 중 모두 또는 임의의 부분들의 이미지를 포함하는, 방법.
[0085] EC53) EC51에 있어서, 결과들은 펌웨어 수정 식별자를 포함하는, 방법.
[0086] EC54) EC51에 있어서, 결과들은 소프트웨어 세팅 보존(SSP)에 영향을 받는 하나 또는 그 초과의 파라미터들을 포함하는, 방법.
[0087] EC55) EC42에 있어서, 액세스를 제공하는 단계는 하나 또는 그 초과의 비휘발성 메모리들에서 하나 또는 그 초과의 데이터 구조들을 관리하는 단계를 포함하는, 방법.
[0088] EC56) 방법으로서,
디바이스에서, 컴퓨팅 호스트로부터 제 1 펌웨어를 수신하는 단계 - 제 1 펌웨어는 제 1 펌웨어 식별 정보와 연관됨 -;
디바이스에서, 컴퓨팅 호스트로부터 제 2 펌웨어를 수신하는 단계 - 제 2 펌웨어를 수신하는 단계는 제 1 펌웨어를 수신하는 단계 이후이고, 제 2 펌웨어는 제 2 펌웨어 식별 정보와 연관됨 -; 및
제 1 펌웨어 식별 정보를 디바이스가 컴퓨팅 호스트로 리턴하는 단계 - 리턴하는 단계는 컴퓨팅 호스트로부터의 특정한 커맨드 타입에 응답하고, 디바이스가 제 2 펌웨어를 실행하는 동안이고, 특정한 이벤트가 발생하기 이전임 -;를 포함하는, 방법.
[0089] EC57) EC56에 있어서, 제 1 펌웨어 식별 정보를 리턴하는 단계는 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)으로 하여금, 디바이스가 제 1 펌웨어를 실행하는 내내(throughout) 그리고 특정한 이벤트까지 제 2 펌웨어를 실행하는 동안 재부팅없이 계속 실행할 수 있게 하는, 방법.
[0090] EC58) EC57에 있어서, OS는 윈도우 OS의 버전을 포함하는, 방법.
[0091] EC59) EC57에 있어서, 특정한 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입을 포함하는, 방법.
[0092] EC60) EC57에 있어서, 특정한 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0093] EC61) EC56에 있어서, 제 1 펌웨어 식별 정보를 리턴하는 단계는 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)으로 하여금, 디바이스가 제 1 펌웨어를 실행하는 내내 그리고 특정한 이벤트까지 제 2 펌웨어를 실행하는 동안, 리턴된 펌웨어 수정 식별자의 값에서의 변화에 응답하는 에러를 검출하지 않고 계속 실행할 수 있게 하는, 방법.
[0094] EC62) EC61에 있어서, OS는 윈도우 OS의 버전을 포함하는, 방법.
[0095] EC63) EC61에 있어서, 특정한 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입을 포함하는, 방법.
[0096] EC64) EC61에 있어서, 특정한 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0097] EC65) EC56에 있어서, 디바이스는 고체 상태 디스크(SSD)를 포함하고, SSD는 제 1 펌웨어, 제 1 펌웨어 식별 정보, 제 2 펌웨어, 및 제 2 펌웨어 식별 정보 중 모두 또는 임의의 조합 중 모두 또는 임의의 부분들을 저장하기 위해 SSD의 하나 또는 그 초과의 비휘발성 메모리들을 관리하도록 인에이블된 제어기를 포함하는, 방법.
[0098] EC66) EC56의 방법에 있어서, 특정한 이벤트는,
디바이스가 전력 사이클링되는 것;
디바이스 중 모두 또는 임의의 부분들이 일 전력 모드로부터 다른 전력 모드로 천이하는 것;
디바이스가 판매자 특정 커맨드를 수신하는 것;
디바이스가 펌웨어 업데이트의 일부로서 특정한 파라미터 및/또는 코드를 수신하는 것; 및
링크가 디바이스를 리셋된 호스트에 커플링하는 것 중 어느 하나 또는 그 초과를 포함하는, 방법.
[0099] EC67) EC56에 있어서,
제 1 펌웨어 식별 정보는 제 1 펌웨어 수정 식별자를 포함하며;
제 2 펌웨어 식별 정보는 제 2 펌웨어 수정 식별자를 포함하는, 방법.
[0100] EC68) EC56에 있어서,
제 1 펌웨어 식별 정보는 제 1 프로토콜 호환성 레벨 식별자를 포함하며;
제 2 펌웨어 식별 정보는 제 2 프로토콜 호환성 레벨 식별자를 포함하는, 방법.
[0101] EC69) EC56에 있어서,
제 1 펌웨어 식별 정보는 소프트웨어 세팅 보존(SSP)에 영향을 받는 하나 또는 그 초과의 파라미터들에 대응하는 값들의 제 1 세트를 포함하며,
제 2 펌웨어 식별 정보는 파라미터들에 대응하는 값들의 제 2 세트를 포함하는, 방법.
[0102] EC70) 방법으로서,
디바이스에서, 컴퓨팅 호스트로부터 제 1 펌웨어를 수신하는 단계 - 제 1 펌웨어는 제 1 펌웨어 식별 정보와 연관됨 -;
디바이스에서, 컴퓨팅 호스트로부터 제 2 펌웨어를 수신하는 단계 - 제 2 펌웨어를 수신하는 단계는 제 1 펌웨어를 수신하는 단계 이후이고, 제 2 펌웨어는 제 2 펌웨어 식별 정보와 연관됨 -;
제 1 펌웨어 식별 정보를 디바이스가 컴퓨팅 호스트로 리턴하는 단계 - 리턴하는 단계는 컴퓨팅 호스트로부터의 제 1 커맨드 타입에 응답하고, 디바이스가 제 2 펌웨어를 실행하는 동안임 -; 및
제 2 펌웨어 식별 정보를 디바이스가 컴퓨팅 호스트로 리턴하는 단계 - 리턴하는 단계는 컴퓨팅 호스트로부터의 제 2 커맨드 타입에 응답하고, 디바이스가 제 2 펌웨어를 실행하는 동안임 -;를 포함하는, 방법.
[0103] EC71) EC70에 있어서,
제 1 커맨드 타입은 판독-아이덴티티 커맨드 타입이며,
제 2 커맨드 타입은 판매자 특정 커맨드 타입인, 방법.
[0104] EC72) EC71에 있어서, 판매자 특정 커맨드 타입은 판매자 특정 펌웨어 식별 정보 판독 커맨드 타입을 포함하는, 방법.
[0105] EC73) EC71에 있어서, 판독-아이덴티티 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입을 포함하는, 방법.
[0106] EC74) EC71에 있어서, 특정한 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0107] EC75) EC71에 있어서, 판독-아이덴티티 커맨드 타입은 제 2 펌웨어 식별 정보가 제 1 펌웨어 식별 정보 대신에 리턴되도록 프로세싱될 때, 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)이 복구불가능한 에러에 직면하는 커맨드 타입을 포함하는, 방법.
[0108] EC76) EC75에 있어서, OS는 윈도우 OS의 버전을 포함하는, 방법.
[0109] EC77) EC70에 있어서, 제 1 펌웨어 식별 정보를 리턴하는 단계는 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)으로 하여금, 디바이스가 제 1 펌웨어를 실행하고 제 2 펌웨어를 실행하는 내내 재부팅없이 계속 실행할 수 있게 하는, 방법.
[0110] EC78) EC77에 있어서, OS는 윈도우 OS의 버전을 포함하는, 방법.
[0111] EC79) EC77에 있어서, 특정한 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입을 포함하는, 방법.
[0112] EC80) EC77에 있어서, 특정한 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0113] EC81) EC70에 있어서, 제 1 펌웨어 식별 정보를 리턴하는 단계는 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)으로 하여금, 디바이스가 제 1 펌웨어를 실행하고 제 2 펌웨어를 실행하는 내내, 리턴된 펌웨어 수정 식별자의 값에서의 변화에 응답하는 에러를 검출하지 않고 계속 실행할 수 있게 하는, 방법.
[0114] EC82) EC81에 있어서, OS는 윈도우 OS의 버전을 포함하는, 방법.
[0115] EC83) EC81에 있어서, 특정한 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입을 포함하는, 방법.
[0116] EC84) EC81에 있어서, 특정한 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0117] EC85) EC70에 있어서, 디바이스는 고체 상태 디스크(SSD)를 포함하고, SSD는 제 1 펌웨어, 제 1 펌웨어 식별 정보, 제 2 펌웨어, 및 제 2 펌웨어 식별 정보 중 모두 또는 임의의 조합 중 모두 또는 임의의 부분들을 저장하기 위해 SSD의 하나 또는 그 초과의 비휘발성 메모리들을 관리하도록 인에이블된 제어기를 포함하는, 방법.
[0118] EC86) EC70에 있어서,
제 1 펌웨어 식별 정보는 제 1 펌웨어 수정 식별자를 포함하며;
제 2 펌웨어 식별 정보는 제 2 펌웨어 수정 식별자를 포함하는, 방법.
[0119] EC87) EC70에 있어서,
제 1 펌웨어 식별 정보는 제 1 프로토콜 호환성 레벨 식별자를 포함하며;
제 2 펌웨어 식별 정보는 제 2 프로토콜 호환성 레벨 식별자를 포함하는, 방법.
[0120] EC88) EC70에 있어서,
제 1 펌웨어 식별 정보는 소프트웨어 세팅 보존(SSP)에 영향을 받는 하나 또는 그 초과의 파라미터들에 대응하는 값들의 제 1 세트를 포함하며,
제 2 펌웨어 식별 정보는 파라미터들에 대응하는 값들의 제 2 세트를 포함하는, 방법.
[0121] EC89) 방법으로서,
(a) 현재 펌웨어 수정 식별자와 연관된 현재 펌웨어에 따라 스토리지 디바이스 제어기를 동작시키는 단계 - (a)의 동작은 스토리지 디바이스 제어기를 포함하는 스토리지 디바이스와 통신하는 컴퓨팅 호스트에 현재 펌웨어 수정 식별자를 리턴하는 것을 포함함 -;
(b) 단계 (a) 이후에, 스토리지 디바이스 제어기를 통해 적어도 부분적으로, 현재 펌웨어 수정 식별자와는 상이한 신규 펌웨어 수정 식별자와 연관된 신규 펌웨어를 수신하는 단계;
(c) 단계 (b) 이후에, 신규 펌웨어에 따라 스토리지 디바이스 제어기를 동작시키는 단계 - 단계 (c)의 동작은 컴퓨팅 호스트에 현재 펌웨어 수정 식별자를 리턴하는 것을 포함함 -; 및
(d) 단계 (b) 이후에 전력 사이클에 응답하여, 신규 펌웨어에 따라 스토리지 디바이스 제어기를 동작시키는 단계 - 단계 (d)의 동작은 컴퓨팅 호스트에 신규 펌웨어 수정 식별자를 리턴하는 것을 포함함 -;를 포함하고,
(f) 스토리지 디바이스는 신규 펌웨어의 적어도 일부를 저장하도록 인에이블된 비휘발성 메모리(NVM)를 포함하며,
(g) 리턴하는 3개의 동작들은 컴퓨팅 호스트로부터의 복수의 커맨드 타입들 중 특정한 하나의 각각의 인스턴스에 각각 응답하고, 특정한 커맨드 타입은, 단계 (c)의 리턴하는 것이 신규 펌웨어 수정 식별자를 리턴하면, 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)이 복구불가능한 에러에 직면하는 것인, 방법.
[0122] EC90) EC89)에 있어서, NVM은 플래시 메모리를 포함하는, 방법.
[0123] EC91) EC89에 있어서, 스토리지 디바이스는 NVM을 포함하는 고체 상태 디스크(SSD)를 포함하는, 방법.
[0124] EC92) EC91)에 있어서, NVM은 플래시 메모리를 포함하는, 방법.
[0125] EC93) EC89에 있어서, 스토리지 디바이스는 NVM을 포함하는 하드 디스크 드라이브(HDD)를 포함하는, 방법.
[0126] EC94) EC89에 있어서, OS는 윈도우 OS의 버전을 포함하는, 방법.
[0127] EC95) EC89에 있어서, 특정한 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입을 포함하는, 방법.
[0128] EC96) EC89에 있어서, 특정한 커맨드 타입은 소형 컴퓨터 시스템 인터페이스(SCSI) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0129] EC97) EC89에 있어서, 특정한 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0130] EC98) EC89에 있어서, 수신하는 단계는 전력 사이클 전까지 현재 펌웨어 수정 식별자를 세이빙하는 단계를 포함하는, 방법.
[0131] EC99) EC89에 있어서, 수신하는 단계는 현재 펌웨어 수정 식별자를 전력 사이클 전까지 변경으로부터 보호하는 단계를 포함하는, 방법.
[0132] EC100) EC89에 있어서, 수신하는 단계는 현재 펌웨어 수정 식별자를 컴퓨팅 호스트에 제공하는 단계 및 현재 펌웨어 수정 식별자를 컴퓨팅 호스트로부터 복원하는 단계를 포함하는, 방법.
[0133] EC101) 방법으로서,
컴퓨팅 호스트에 커플링하도록 인에이블된 스토리지 디바이스에서, 제 1 펌웨어, 제 1 펌웨어 수정 식별자, 제 2 펌웨어, 및 제 2 펌웨어 수정 식별자를 저장하기 위해 스토리지 디바이스의 비휘발성 메모리(NVM)를 관리하는 단계;
스토리지 디바이스에서, 컴퓨팅 호스트로부터 제 1 펌웨어를 수신하는 단계 - 제 1 펌웨어는 제 1 펌웨어 수정 식별자와 연관됨 -;
스토리지 디바이스에서, 컴퓨팅 호스트로부터 제 2 펌웨어를 수신하는 단계 - 제 2 펌웨어를 수신하는 단계는 제 1 펌웨어를 수신하는 단계 이후이고, 제 2 펌웨어는 제 2 펌웨어 수정 식별자와 연관됨 -; 및
제 1 펌웨어 수정 식별자를 스토리지 디바이스가 컴퓨팅 호스트로 리턴하는 단계 - 리턴하는 단계는 컴퓨팅 호스트로부터의 특정한 커맨드 타입에 응답하고, 스토리지 디바이스가 제 2 펌웨어를 실행하는 동안이고, 특정한 이벤트가 발생하기 이전임 -;를 포함하고,
제 1 펌웨어 수정 식별자를 리턴하는 단계는 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)으로 하여금, 스토리지 디바이스가 제 1 펌웨어를 실행하는 내내 그리고 특정한 이벤트까지 제 2 펌웨어를 실행하는 동안, 리턴된 펌웨어 수정 식별자의 값에서의 변화에 응답하는 에러를 검출하지 않고 계속 실행할 수 있게 하는, 방법.
[0134] EC102) EC101에 있어서, NVM은 플래시 메모리를 포함하는, 방법.
[0135] EC103) EC101에 있어서, 스토리지 디바이스는 NVM을 포함하는 고체 상태 디스크(SSD)를 포함하는, 방법.
[0136] EC104) EC103에 있어서, NVM은 플래시 메모리를 포함하는, 방법.
[0137] EC105) EC101에 있어서, 스토리지 디바이스는 NVM을 포함하는 하드 디스크 드라이브(HDD)를 포함하는, 방법.
[0138] EC106) EC101에 있어서, 특정한 이벤트는 스토리지 디바이스의 전력 사이클을 포함하는, 방법.
[0139] EC107) EC101에 있어서, 제 2 펌웨어를 실행하는 동안 특정한 이벤트가 발생한 이후에, 컴퓨팅 호스트로부터의 특정한 커맨드 타입에 응답하여, 제 2 펌웨어 수정 식별자를 컴퓨팅 호스트에 리턴하는 단계를 더 포함하는, 방법.
[0140] EC108) EC101에 있어서, OS는 윈도우 OS의 버전을 포함하는, 방법.
[0141] EC109) EC101에 있어서, 특정한 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입을 포함하는, 방법.
[0142] EC110) EC101에 있어서, 특정한 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0143] EC111) 방법으로서,
제 1 펌웨어, 제 1 펌웨어 수정 식별자, 제 2 펌웨어, 및 제 2 펌웨어 수정 식별자를 저장하기 위해 스토리지 디바이스의 비휘발성 메모리(NVM)를 관리하는 단계 - 스토리지 디바이스는 컴퓨팅 호스트에 커플링하도록 인에이블됨 -;
스토리지 디바이스에서, 컴퓨팅 호스트로부터 제 1 펌웨어를 수신하는 단계 - 제 1 펌웨어는 제 1 펌웨어 수정 식별자와 연관됨 -;
스토리지 디바이스에서, 컴퓨팅 호스트로부터 제 2 펌웨어를 수신하는 단계 - 제 2 펌웨어를 수신하는 단계는 제 1 펌웨어를 수신하는 단계 이후이고, 제 2 펌웨어는 제 2 펌웨어 수정 식별자와 연관됨 -; 및
제 1 펌웨어 수정 식별자를 스토리지 디바이스가 컴퓨팅 호스트로 리턴하는 단계 - 제 1 펌웨어 수정 식별자를 리턴하는 단계는 컴퓨팅 호스트로부터의 제 1 커맨드 타입에 응답하고, 스토리지 디바이스가 제 2 펌웨어를 실행하는 동안임 -; 및
제 2 펌웨어 수정 식별자를 스토리지 디바이스가 컴퓨팅 호스트로 리턴하는 단계 - 제 1 펌웨어 수정 식별자를 리턴하는 단계는 컴퓨팅 호스트로부터의 제 2 커맨드 타입에 응답하고, 스토리지 디바이스가 제 2 펌웨어를 실행하는 동안임 -;를 포함하고,
제 1 커맨드 타입은 판독-아이덴티티 커맨드 타입이며,
제 2 커맨드 타입은 판매자 특정 커맨드 타입인, 방법.
[0144] EC112) EC111에 있어서, NVM은 플래시 메모리를 포함하는, 방법.
[0145] EC113) EC111에 있어서, 스토리지 디바이스는 NVM을 포함하는 고체 상태 디스크(SSD)를 포함하는, 방법.
[0146] EC114) EC113에 있어서, NVM은 플래시 메모리를 포함하는, 방법.
[0147] EC115) EC111에 있어서, 스토리지 디바이스는 NVM을 포함하는 하드 디스크 드라이브(HDD)를 포함하는, 방법.
[0148] EC116) EC111에 있어서, 판매자 특정 커맨드 타입은 판매자 특정 펌웨어 식별 정보 판독 커맨드 타입을 포함하는, 방법.
[0149] EC117) EC111에 있어서, 판독-아이덴티티 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입을 포함하는, 방법.
[0150] EC118) EC111에 있어서, 판독-아이덴티티 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0151] EC119) EC111에 있어서, 판독-아이덴티티 커맨드 타입은 제 2 펌웨어 수정 식별자가 제 1 펌웨어 수정 식별자 대신에 리턴되도록 프로세싱될 때, 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)이 복구불가능한 에러에 직면하는 커맨드 타입을 포함하는, 방법.
[0152] EC120) EC119에 있어서, OS는 윈도우 OS의 버전을 포함하는, 방법.
[0153] EC121) 시스템으로서,
(a) 복수의 펌웨어 이미지들 중 선택된 하나에 따라, 대응하는 식별자를 갖는 펌웨어 이미지들 각각을 실행하기 위한 수단 - 펌웨어 이미지들은 각각의 대응하는 현재 및 신규 식별자들을 갖는 각각의 현재 및 신규 펌웨어 이미지들을 포함함 -;
(b) 현재 펌웨어 이미지인 선택된 펌웨어 이미지와 실행하기 위한 수단을 사용하면서, 컴퓨팅 호스트로부터의 복수의 커맨드 타입들 중 특정한 하나의 제 1 인스턴스에 응답하여, 현재 식별자를 리턴하기 위한 수단;
(c) 수단 (b) 이후에 동작가능하고, 신규 식별자를 갖는 신규 펌웨어 이미지를 수신하기 위한 수단;
(d) 수단 (c) 이후에 동작가능하고, 신규 펌웨어 이미지인 선택된 펌웨어 이미지와 실행하기 위한 수단을 사용하면서, 특정한 커맨드 타입의 제 2 인스턴스에 응답하여, 현재 식별자를 리턴하기 위한 수단;
(e) 수단 (b) 이후에 동작가능하고 전력 사이클에 응답하여, 신규 펌웨어 이미지인 선택된 펌웨어 이미지와 실행하기 위한 수단을 사용하면서, 특정한 커맨드 타입의 제 3 인스턴스에 응답하여, 신규 식별자를 리턴하기 위한 수단; 및
신규 펌웨어의 적어도 일부를 저장하도록 인에이블된 플래시 메모리를 포함하고,
특정한 커맨드 타입은,
(ⅰ) 제 1 각각의 식별자가 특정한 커맨드 타입의 제 1 각각의 인스턴스에 응답하여 컴퓨팅 호스트에 리턴될 때,
(ⅱ) 제 2 각각의 식별자가 특정한 커맨드 타입의 제 2 각각의 인스턴스에 응답하여 컴퓨팅 호스트에 리턴될 때, 및
(ⅲ) 리턴되는 제 1 각각의 식별자와 리턴되는 제 2 각각의 식별자 사이에서 발생하는 전력 사이클이 없을 때,
컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)이 제 2 각각의 식별자의 리턴에 응답하여 복구불가능한 에러에 직면하는 것인, 시스템.
[0154] EC122) EC121에 있어서, 시스템은 고체 상태 디스크(SSD) 중 모두 또는 임의의 부분들을 포함하는, 시스템.
[0155] EC123) EC121에 있어서, OS는 윈도우 OS의 버전을 포함하고, 특정한 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입을 포함하는, 시스템.
[0156] EC124) EC121에 있어서, OS는 윈도우 OS의 버전을 포함하고, 특정한 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 방법.
[0157] SSD 제어기를 갖거나 참조하는 임의의 상술한 EC들로서, SSD 제어기는 단일 집적 회로(IC)에서 구현되는, EC들.
[0158] SSD 제어기 및 하나 또는 그 초과의 비휘발성 메모리들을 갖거나 참조하는 임의의 상술한 EC들로서, SSD 제어기 및 비휘발성 메모리들은 SSD에서 구성되는, EC들.
[0159] 비휘발성 메모리들을 갖거나 참조하는 임의의 상술한 EC들로서, 비휘발성 메모리들 중 적어도 하나는 하나 또는 그 초과의 플래시 메모리들을 포함하는, EC들.
[0160] SSD 제어기 및 컴퓨팅 호스트를 갖거나 참조하는 임의의 상술한 EC들로서, SSD 제어기는 스토리지 인터페이스 표준과 호환가능하고 컴퓨팅 호스트에 커플링하도록 인에이블된 스토리지 인터페이스를 포함하는, EC들.
[0161] SSD 제어기를 갖거나 참조하는 임의의 상술한 EC들로서, SSD 제어기는 비휘발성 메모리 인터페이스를 포함하는, EC들.
[0162] 비휘발성 메모리 인터페이스를 갖거나 참조하는 임의의 상술한 EC들로서, 비휘발성 메모리 인터페이스는 플래시 메모리 인터페이스를 포함하는, EC들.
[0163] SSD 제어기를 갖거나 참조하는 임의의 상술한 EC들로서, SSD 제어기는 플래시 메모리 인터페이스를 포함하는, EC들.
[0164] 적어도 하나의 플래시 메모리를 갖거나 참조하는 임의의 상술한 EC들로서, 플래시 메모리들 중 적어도 하나는,
NAND 플래시 기술 스토리지 셀들, 및
NOR 플래시 기술 스토리지 셀들 중 하나 또는 그 초과를 포함하는, EC들.
[0165] 적어도 하나의 플래시 메모리를 갖거나 참조하는 임의의 상술한 EC들로서, 플래시 메모리들 중 적어도 하나는,
단일 레벨 셀(SLC) 플래시 기술 스토리지 셀들, 및
멀티 레벨 셀(MLC) 플래시 기술 스토리지 셀들 중 하나 또는 그 초과를 포함하는, EC들.
[0166] 플래시 메모리 인터페이스를 갖거나 참조하는 임의의 상술한 EC들로서, 플래시 메모리 인터페이스는,
오픈 NAND 플래시 인터페이스(ONFI),
토글 모드 인터페이스,
더블-데이터-레이트(DDR) 동기 인터페이스,
동기 인터페이스, 및
비동기 인터페이스 중 하나 또는 그 초과와 호환가능한, EC들.
[0167] 스토리지 인터페이스 표준을 갖거나 참조하는 임의의 상술한 EC들로서, 스토리지 인터페이스 표준은,
범용 직렬 버스(USB) 인터페이스 표준,
콤팩트 플래시(CF) 인터페이스 표준,
멀티미디어카드(MMC) 인터페이스 표준,
보안 디지털(SD) 인터페이스 표준,
메모리 스틱 인터페이스 표준,
xD-픽처 카드 인터페이스 표준,
집적 드라이브 전자장치(IDE) 인터페이스 표준,
직렬 어드밴스드 기술 부착(SATA) 인터페이스 표준,
외부 SATA(eSATA) 인터페이스 표준,
소형 컴퓨터 시스템 인터페이스(SCSI) 인터페이스 표준,
직렬 부착 소형 컴퓨터 시스템 인터페이스(SAS) 인터페이스 표준,
섬유 채널 인터페이스 표준,
이더넷 인터페이스 표준, 및
주변 컴포넌트 상호접속 익스프레스(PCIe) 인터페이스 표준 중 하나 또는 그 초과를 포함하는, EC들.
[0168] 컴퓨팅 호스트를 갖거나 참조하는 임의의 상술한 EC들로서, 컴퓨팅 호스트는,
컴퓨터,
워크스테이션 컴퓨터,
서버 컴퓨터,
스토리지 서버,
개인 컴퓨터(PC),
랩탑 컴퓨터,
노트북 컴퓨터,
넷북 컴퓨터,
휴대 보조 단말기(PDA),
미디어 플레이어,
미디어 리코더,
디지털 카메라,
셀룰러 핸드셋,
코드리스 전화 핸드셋, 및
전자 게임 중 하나 또는 그 초과를 포함하는, EC들.
[0169] 상술한 EC들 중 모두 또는 임의의 부분들의 유사물들 및/또는 변경물들인 장치, 시스템, 방법, 수단 플러스 기능, 및 컴퓨터 판독가능 매체를 포함하는 추가의 EC들이 예상된다.
시스템
[0170] 도 1a는 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리를 제공하는 고체 상태 디스크(SSD)(100)를 포함하는 SSD(101)의 실시예의 선택된 상세사항들을 예시한다. SSD 제어기는 NVM 소자들(예를 들어, 플래시 메모리들)을 통해 구현된 것과 같은 비휘발성 스토리지를 관리하기 위한 것이다. SSD 제어기(100)는 하나 또는 그 초과의 외부 인터페이스(110)를 통해 호스트(미도시)에 통신가능하게 커플링된다. 다양한 실시예들에 따르면, 외부 인터페이스들(110)은 SATA 인터페이스, SAS 인터페이스, PCIe 인터페이스, 섬유 채널 인터페이스, (10 기가바이트 이더넷과 같은) 이더넷 인터페이스, 임의의 선행 인터페이스들의 비표준 버전, 커스텀 인터페이스, 또는 스토리지 및/또는 통신 및/또는 컴퓨팅 디바이스들을 상호접속하기 위해 사용된 임의의 다른 타입의 인터페이스 중 하나 또는 그 초과이다. 예를 들어, 일부 실시예들에서, SSD 제어기(100)는 SATA 인터페이스 및 PCIe 인터페이스를 포함한다.
[0171] SSD 제어기(100)는 플래시 디바이스(192)의 하나 또는 그 초과와 같은 하나 또는 그 초과의 스토리지 디바이스들을 포함하는 NVM(199)에 하나 또는 그 초과의 디바이스 인터페이스들(190)을 통해 통신가능하게 더 커플링된다. 다양한 실시예들에 따르면, 디바이스 인터페이스들(190)은 비동기 인터페이스, 동기 인터페이스, DDR 동기 인터페이스, ONFI 2.2 또는 ONFI 3.0 호환가능 인터페이스와 같은 ONFI 호환가능 인터페이스, 토글 모드 호환가능 플래시 인터페이스, 임의의 선행 인터페이스들의 비표준 버전, 커스텀 인터페이스, 또는 스토리지 디바이스들에 접속하기 위해 사용된 임의의 다른 타입의 인터페이스 중 하나 또는 그 초과이다.
[0172] 각 플래시 디바이스(192)는 일부 실시예들에서, 하나 또는 그 초과의 개별 플래시 다이(194)를 갖는다. 플래시 디바이스(192)의 특정한 하나의 타입에 따르면, 특정한 플래시 디바이스(192)에서의 복수의 플래시 다이(194)는 옵션으로 및/또는 선택적으로 병렬로 액세스가능하다. 플래시 디바이스(192)는 SSD 제어기(100)에 통신가능하게 커플링하도록 인에이블된 스토리지 디바이스의 일 타입을 단지 나타낸다. 다양한 실시예들에서, SLC NAND 플래시 메모리, MLC NAND 플래시 메모리, NOR 플래시 메모리, 폴리실리콘 또는 실리콘 질화물 기술 기반 전하 스토리지 셀들을 사용하는 플래시 메모리, 2차원 또는 3차원 기술 기반 플래시 메모리, 판독 전용 메모리, 정적 랜덤 액세스 메모리, 동적 랜덤 액세스 메모리, 강자성 메모리, 위상 변화 메모리, 레이스트랙(racetrack) 메모리, ReRAM, 또는 임의의 다른 타입의 메모리 디바이스 또는 스토리지 매체와 같은 임의의 타입의 스토리지 디바이스가 사용가능하다.
[0173] 다양한 실시예들에 따르면, 디바이스 인터페이스들(190)은 버스 당 하나 또는 그 초과의 플래시 디바이스(192)를 갖는 하나 또는 그 초과의 버스들, 버스 당 하나 또는 그 초과의 플래시 디바이스(192)를 갖는 버스들의 하나 또는 그 초과의 그룹들 - 그룹에서의 버스들은 일반적으로 병렬로 액세스됨-, 또는 디바이스 인터페이스들(190)상의 하나 또는 그 초과의 플래시 디바이스(192)의 임의의 다른 구성으로서 구성된다.
[0174] 도 1a에 계속하여, SSD 제어기(110)는 호스트 인터페이스들(111), 데이터 프로세싱(121), 버퍼(131), 맵(141), 리사이클러(151), ECC(161), 디바이스 인터페이스 로직(191), 및 CPU(171)와 같은 하나 또는 그 초과의 모듈들을 갖는다. 도 1a에 예시된 특정한 모듈들 및 상호접속들은 단지 하나의 실시예를 나타내며, 예시되지 않은 추가의 모듈들 뿐만 아니라 모듈들 중 일부 또는 모두의 다수의 배열들 및 상호접속들이 구상된다. 제 1 예에서, 일부 실시예들에서, 이중-포팅(dual-porting)을 제공하기 위해 2개 또는 그 초과의 호스트 인터페이스들(111)이 존재한다. 제 2 예에서, 일부 실시예들에서, 데이터 프로세싱(121) 및/또는 ECC(161)는 버퍼(131)와 조합된다. 제 3 예에서, 일부 실시예들에서, 호스트 인터페이스들(111)은 버퍼(131)에 직접 커플링되고, 데이터 프로세싱(121)은 버퍼(131)에 저장된 데이터에 대해 옵션으로 및/또는 선택적으로 동작한다. 제 4 예에서, 일부 실시예들에서, 디바이스 인터페이스 로직(191)은 버퍼(131)에 직접 커플링되고, ECC(161)는 버퍼(131)에 저장된 데이터에 대해 옵션으로 및/또는 선택적으로 동작한다.
[0175] 호스트 인터페이스들(111)은 외부 인터페이스들(110)을 통해 커맨드들 및/또는 데이터를 전송 및 수신하고, 일부 실시예들에서는, 태그 트랙킹(113)을 통해 개별 커맨드들의 진행을 트랙킹한다. 예를 들어, 커맨드들은 판독하기 위해 (LBA와 같은) 어드레스 및 (다수의 LBA 정량, 예를 들어, 섹터들과 같은) 데이터량을 특정하는 판독 커맨드를 포함하고, 이에 응답하여, SSD는 판독 상태 및/또는 판독 데이터를 제공한다. 다른 예에 있어서, 커맨드들은 기록하기 위해 (LBA와 같은) 어드레스 및 (다수의 LBA 정량, 예를 들어, 섹터들과 같은) 데이터량을 특정하는 기록 커맨드를 포함하고, 이에 응답하여, SSD는 판독 상태를 제공하고/하거나 기록 데이터를 요청하고 옵션으로 후속하여 기록 상태를 제공한다. 또 다른 예에 있어서, 커맨드들은 더 이상 할당될 필요가 없는 (하나 또는 그 초과의 LBA들과 같은) 하나 또는 그 초과의 어드레스들을 특정하는 할당해제 커맨드(예를 들어, 트림 커맨드)를 포함하고, 이에 응답하여, SSD는 맵을 그에 따라 변경하고 옵션으로 할당해제 상태를 제공한다. 일부 컨텍스트들에서, ATA 호환가능 TRIM 커맨드는 예시적인 할당해제 커맨드이다. 또 다른 예에 있어서, 커맨드들은 수퍼 커패시터 테스트 커맨드 또는 데이터 경화 성공 문의를 포함하고, 이에 응답하여 SSD는 적절한 상태를 제공한다. 일부 실시예들에서, 호스트 인터페이스들(111)은 SATA 프로토콜과 호환가능하고, NCQ 커맨드들을 사용하여, 0 내지 31의 번호로서 표현된 고유 태그를 각각 갖는 32개까지의 펜딩 커맨드들을 갖도록 인에이블된다. 일부 실시예들에서, 태그 트랙킹(113)은 외부 인터페이스들(110)을 통해 수신된 커맨드에 대한 외부 태그를 SSD 제어기(100)에 의한 프로세싱 동안 커맨드를 트랙킹하기 위해 사용된 내부 태그와 연관시키도록 인에이블된다.
[0176] 다양한 실시예들에 따르면, 하나 또는 그 초과의 데이터 프로세싱(121)은 버퍼(131)와 외부 인터페이스(110) 사이에서 전송된 데이터 중 일부 또는 모두를 옵션으로 및/또는 선택적으로 프로세싱하고, 데이터 프로세싱(121)은 버퍼(131)에 저장된 데이터를 옵션으로 및/또는 선택적으로 프로세싱한다. 일부 실시예들에서, 데이터 프로세싱(121)은 포맷팅, 리포맷팅, 트랜스코딩, 및 임의의 다른 데이터 프로세싱 및/또는 조작 작업 중 하나 또는 그 초과를 수행하기 위해 하나 또는 그 초과의 엔진들(123)을 사용한다.
[0177] 버퍼(131)는 디바이스 인터페이스들(190)로부터 외부 인터페이스들(110)로 및/또는 외부 인터페이스들(110)로부터 디바이스 인터페이스들(190)로 전송된 데이터를 저장한다. 일부 실시예들에서, 버퍼(131)는 하나 또는 그 초과의 플래시 디바이스(192)를 관리하기 위해 SSD 제어기(100)에 의해 사용된 맵 테이블들 중 일부 또는 모두와 같은 시스템 데이터를 추가로 저장한다. 다양한 실시예들에서, 버퍼(131)는 데이터의 임시 저장을 위해 사용된 메모리(137), 버퍼(131)로 및/또는 버퍼(131)로부터의 데이터의 이동을 제어하기 위해 사용된 DMA(133), 상위 레벨 에러 정정 및/또는 리던던시 기능들을 제공하기 위해 사용된 ECC-X(135), 및 다른 데이터 이동 및/또는 조작 기능들 중 하나 또는 그 초과를 갖는다. 상위 레벨 리던던시 기능의 일례가 RAID형 능력이고, 여기서, 리던던시는 디스크 레벨 대신 플래시 디바이스(예를 들어, 플래시 디바이스(192)의 다중의 플래시 디바이스들) 레벨 및/또는 플래시 다이(예를 들어, 플래시 다이(194)) 레벨에 있다.
[0178] 다양한 실시예들에 따르면, 하나 또는 그 초과의 ECC(161)는 버퍼(131)와 디바이스 인터페이스(190) 사이에서 전송된 데이터 중 일부 또는 모두를 옵션으로 및/또는 선택적으로 프로세싱하고, ECC(161)는 버퍼(131)에 저장된 데이터를 옵션으로 및/또는 선택적으로 프로세싱한다. 일부 실시예들에서, ECC(161)는 예를 들어, 하나 또는 그 초과의 ECC 기법들에 따라, 하위 레벨 에러 정정 및/또는 리던던시 기능들을 제공하기 위해 사용된다. 일부 실시예들에서, ECC(161)는 CRC 코드, 해밍 코드, RS 코드, BCH 코드, LDPC 코드, 비터비 코드, 트렐리스 코드, 하드 판정 코드, 소프트 판정 코드, 이레이저 기반 코드, 임의의 에러 검출 및/또는 정정 코드, 및 이들의 임의의 조합 중 하나 또는 그 초과를 구현한다. 일부 실시예들에서, ECC(161)는 (LDPC 디코더들과 같은) 하나 또는 그 초과의 디코더들을 포함한다.
[0179] 디바이스 인터페이스 로직(191)은 디바이스 인터페이스들(190)을 통해 플래시 디바이스(192)의 인스턴스들을 제어한다. 디바이스 인터페이스 로직(191)은 플래시 디바이스(192)의 프로토콜에 따라 플래시 디바이스(192)의 인스턴스들로/인스턴스들로부터 데이터를 전송하도록 인에이블된다. 디바이스 인터페이스 로직(191)은 디바이스 인터페이스들(190)을 통해 플래시 디바이스(192)의 인스턴스들의 제어를 선택적으로 시퀀싱하기 위한 스케줄링(193)을 포함한다. 예를 들어, 일부 실시예들에서, 스케줄링(193)은 플래시 디바이스(192)의 인스턴스들에 대한 동작들을 큐잉(queue)하고, 플래시 디바이스(192)(또는 플래시 다이(194))의 인스턴스들 중 개별 인스턴스들이 이용가능할 때 플래시 디바이스(192)(또는 플래시 다이(194))의 인스턴스들 중 개별 인스턴스들에 동작들을 선택적으로 전송하도록 인에이블된다.
[0180] 맵(141)은 외부 데이터 어드레스들을 NVM(199)에서의 위치들에 매핑하기 위해 테이블(143)을 사용하여, 외부 인터페이스들(110)상에서 사용된 데이터 어드레싱과 디바이스 인터페이스들(190)상에서 사용된 데이터 어드레싱 사이에서 변환한다. 예를 들어, 일부 실시예들에서, 맵(141)은 테이블(143)에 의해 제공된 매핑을 통해 하나 또는 그 초과의 플래시 다이(194)를 타겟으로 하는 블록 및/또는 페이지 어드레스들로 외부 인터페이스들(110)상에서 사용된 LBA들을 변환한다. 드라이브 제조 또는 할당해제 이후 기록된 적이 없는 LBA들에 대해, 맵은 LBA들이 판독된 경우 리턴하기 위해 디폴트 값으로 포인팅한다. 예를 들어, 할당해제 커맨드를 프로세싱할 때, 맵은 할당해제된 LBA들에 대응하는 엔트리들이 디폴트 값들 중 하나에 포인팅하도록 변경된다. 다양한 실시예들에서, 각각 대응하는 포인터를 갖는 다양한 디폴트 값들이 존재한다. 복수의 디폴트 값들은 (제 1 범위에서와 같은) 일부 할당해제된 LBA들을 하나의 디폴트 값으로서 판독하는 것을 가능하게 하면서 (제 2 범위에서와 같은) 다른 할당해제된 LBA들을 다른 디폴트 값으로서 판독하는 것을 가능하게 한다. 다양한 실시예들에서, 디폴트 값들은 플래시 메모리, 하드웨어, 펌웨어, 커맨드 및/또는 원시 독립변수들 및/또는 파라미터들, 프로그램가능한 레지스터들, 또는 이들의 다양한 조합들에 의해 정의된다.
[0181] 일부 실시예들에서, 리사이클러(151)는 가비지 회수를 수행한다. 예를 들어, 일부 실시예들에서, 플래시 디바이스(192)의 인스턴스들은 블록들이 재기록가능하기 이전에 소거되어야 하는 블록을 포함한다. 리사이클러(151)는 예를 들어, 맵(141)에 의해 유지된 맵을 스캔함으로써 플래시 디바이스(192)의 인스턴스들 중 어느 부분들이 액티브하게 사용중인지 (예를 들어, 할당해제 대신에 할당되는지)를 결정하고, 플래시 디바이스(192)의 인스턴스들 중 미사용(예를 들어, 할당해제된) 부분들을 이들을 소거함으로써 기록하는데 이용가능하게 하도록 인에이블된다. 다른 실시예들에서, 리사이클러(151)는 플래시 디바이스(192)의 인스턴스들 중 더 큰 인접 부분들을 기록하는데 이용가능하게 하기 위해 플래시 디바이스(192)의 인스턴스들내에 저장된 데이터를 이동시키도록 인에이블된다.
[0182] CPU(171)는 SSD 제어기(100)의 다양한 부분들을 제어한다. CPU(171)는 CPU 코어(172)를 포함한다. 다양한 실시예들에 따라, CPU 코어(172)는 하나 또는 그 초과의 단일-코어 또는 멀티-코어 프로세서들이다. 일부 실시예들에서, CPU 코어(172)에서의 개별 프로세서 코어들은 멀티-쓰레드된다(multi-threaded). CPU 코어(172)는 명령어 및/또는 데이터 캐시들 및/또는 메모리들을 포함한다. 예를 들어, 명령 메모리는 CPU 코어(172)로 하여금 SSD 제어기(100)를 제어하기 위해 프로그램(예를 들어, 때때로 펌웨어로 칭하는 소프트웨어)을 실행할 수 있게 하기 위한 명령어들을 포함한다. 일부 실시예들에서, CPU 코어(172)에 의해 실행된 펌웨어 중 일부 또는 모두는 (예를 들어, 도 1b 및 1c에서 NVM(199)의 펌웨어(106)로서 예시된 바와 같이) 플래시 디바이스(192)의 인스턴스들상에 저장된다.
[0183] 다양한 실시예들에서, CPU(171)는 커맨드들이 진행중인 동안 외부 인터페이스들(110)을 통해 수신된 커맨드들을 트랙킹 및 제어하기 위한 커맨드 관리 유닛(173), 버퍼(131)의 할당 및 사용을 제어하기 위한 버퍼 관리 유닛(175), 맵(141)을 제어하기 위한 변환 관리 유닛(177), 데이터 어드레싱의 일치성을 제어하고 예를 들어, 외부 데이터 액세스들과 리사이클 데이터 액세스들 사이의 충돌들을 회피하기 위한 코히어런시 관리 유닛(179), 디바이스 인터페이스 로직(191)을 제어하기 위한 디바이스 관리 유닛(181), 식별 정보의 변경 및 통신을 제어하기 위한 아이덴티티 관리 유닛(182), 및 옵션으로 다른 관리 유닛들을 더 포함한다. 다양한 실시예들에 따르면, 하드웨어, (외부 인터페이스들(110)을 통해 접속된 CPU 코어(172) 또는 호스트상에서 실행하는 펌웨어와 같은) 소프트웨어, 또는 이들의 임의의 조합에 의해, CPU(171)에 의해 수행된 관리 기능들 중 어느 것도 제어 및/또는 관리되지 않거나, 그 관리 기능들 중 임의의 것이 제어 및/또는 관리되거나, 그 관리 기능 모두가 제어 및/또는 관리된다.
[0184] 일부 실시예들에서, CPU(171)는 성능 통계의 수집 및/또는 리포팅, SMART의 구현, 전력 시퀀싱의 제어, 전력 소모의 제어 및/또는 모니터링 및/또는 조정, 정전에 대한 응답, 클록 레이트들의 제어 및/또는 모니터링 및/또는 조정, 및 다른 관리 작업들 중 하나 또는 그 초과와 같은 다른 관리 작업들을 수행하도록 인에이블된다.
[0185] 다양한 실시예들은 SSD 제어기(100)와 유사하고 예를 들어, 호스트 인터페이스들(111) 및/또는 외부 인터페이스들(110)의 적용을 통해 다양한 컴퓨팅 호스트들과의 동작과 호환가능한 컴퓨팅 호스트 플래시 메모리 제어기를 포함한다. 다양한 컴퓨팅 호스트들은 컴퓨터, 워크스테이션 컴퓨터, 서버 컴퓨터, 스토리지 서버, PC, 랩탑 컴퓨터, 노트북 컴퓨터, 넷북 컴퓨터, PDA, 미디어 플레이어, 미디어 리코더, 디지털 카메라, 셀룰러 핸드셋, 코드리스 전화 핸드셋, 및 전자 게임 중 하나 또는 임의의 조합을 포함한다.
[0186] 다양한 실시예들에서, SSD 제어기(또는 컴퓨팅 호스트 플래시 메모리 제어기) 중 모두 또는 임의의 부분들은 단일 IC, 멀티-다이 IC의 단일 다이, 멀티-다이 IC의 복수의 다이들, 또는 복수의 IC들상에서 구현된다. 예를 들어, 버퍼(131)는 SSD 제어기(100)의 다른 소자들과 동일한 다이상에서 구현된다. 다른 예에 있어서, 버퍼(131)는 SSD 제어기(100)의 다른 소자들과는 상이한 다이상에서 구현된다.
[0187] 도 1b는 도 1a의 SSD를 포함하는 시스템의 실시예의 선택된 상세사항들을 예시한다. SSD(101)는 디바이스 인터페이스들(190)을 통해 NVM(199)에 커플링된 SSD 제어기(100)를 포함한다. SSD는 외부 인터페이스들(110)을 통해 호스트(102)에 커플링된다. 일부 실시예들에서, SSD(101)(또는 그것의 변형들)는 호스트(102)로서 동작하는 개시자(initiator)에 커플링되는 SAS 드라이브 또는 SATA 드라이브에 대응한다.
[0188] 호스트(102)는 OS(105)를 실행하도록 인에이블되고, OS는 SSD와 인터페이싱하기 위해 드라이버들(미도시)을 포함하고/하거나 그 드라이버들과 동작하도록 인에이블된다. 다양한 버전들의 윈도우들(예를 들어, 95, 98, ME, NT, XP, 2000, 서버, 비스타, 및 7), 다양한 버전들의 리눅스(예를 들어, Red Hat, Debian, 및 Ubuntu), 및 다양한 버전들의 MacOS(예를 들어, 8, 9 및 X)가 OS(105)의 예들이다.
[0189] 일부 실시예들에서, NVM(199)의 하나 또는 그 초과의 부분들은 펌웨어 스토리지(106) 및/또는 선택 ID 정보 스토리지(107)에 대해 사용된다. 펌웨어 스토리지는 하나 또는 그 초과의 펌웨어 이미지들(또는 그것의 부분들)을 포함한다. 예를 들어, 펌웨어 이미지는 예를 들어, SSD 제어기(100)의 CPU 코어(172)에 의해 실행된 소프트웨어의 하나 또는 그 초과의 이미지들을 갖는다. 다른 예에 있어서, 펌웨어 이미지는 예를 들어, 소프트웨어 실행 동안 CPU 코어에 의해 참조되는 상수들, 파라미터 값들, 및 NVM 디바이스 정보의 하나 또는 그 초과의 이미지들을 갖는다. 펌웨어의 하나 또는 그 초과의 이미지들은 예를 들어, 현재의 펌웨어 이미지 및 (펌웨어 업데이트들에 관한) 제로 또는 그 초과의 이전의 펌웨어 이미지들에 대응한다.
[0190] 선택 ID 정보 스토리지(107)는 SSD(101), SSD 제어기(100), CPU 코어가 현재 실행하는(또는 다음의 전력 사이클 이후에 실행될) 소프트웨어 중 모두 또는 임의의 부분들, 및 SSD를 이용하는 특정한 제품 중 어느 하나 또는 그 초과와 연관된 아이덴티티/식별 정보 중 모두 또는 임의의 부분들의 하나 또는 그 초과의 이미지들을 포함한다. 하나 또는 그 초과의 아이덴티티/식별 정보 이미지들은 예를 들어, 현재 펌웨어 이미지 실행의 결과들 및 펌웨어 이미지 실행들의 제로 또는 그 초과의 이전의 결과들에 대응한다.
[0191] 다양한 실시예들에서, 선택 ID 정보 스토리지(107)는 펌웨어 수정 식별자 중 모두 또는 임의의 부분들 및/또는 SSD에 영향을 받는 상태 및/또는 파라미터들 중 모두 또는 임의의 부분들을 포함한다. 더욱 일반적으로, 선택 ID 정보 스토리지는 본 명세서 다른 곳에서 설명하는 바와 같이 아이덴티티 및/또는 식별 정보 중 모두 또는 임의의 부분들의 하나 또는 그 초과의 버전들을 포함한다. 버전들은 펌웨어의 각각의 버전들 및/또는 펌웨어의 부팅들에 대응한다.
[0192] 도 1c는 도 1a의 SSD를 포함하는 시스템의 다른 실시예의 선택된 상세사항들을 예시한다. 도 1b에서와 같이, SSD(101)는 디바이스 인터페이스들(190)을 통해 NVM(199)에 커플링된 SSD 제어기(100)를 포함한다. SSD는 중간 제어기(103)에 커플링되는 외부 인터페이스들(110)을 통해 호스트(102)에 커플링되고 그 후, 중간 인터페이스들(104)을 통해 호스트(102)에 커플링된다. 다양한 실시예들에서, SSD 제어기(100)는 RAID 제어기와 같은 다른 제어기들의 하나 또는 그 초과의 중간 레벨들을 통해 호스트에 커플링된다. 일부 실시예들에서, SSD(101)(또는 그것의 변형들)는 SAS 드라이브 또는 SATA 드라이브에 대응하고, 중간 제어기(103)는 개시자에 차례로 커플링되는 확장자에 대응하거나, 다르게는, 중간 제어기(103)는 확장자를 통해 개시자에 간접적으로 커플링되는 브리지에 대응한다.
[0193] 다양한 실시예들에서, 하나 또는 그 초과의 NVM들과 결합하여 SSD 제어기 및/또는 컴퓨팅-호스트 플래시 메모리 제어기는 USB 스토리지 컴포넌트, CF 스토리지 컴포넌트, MMC 스토리지 컴포넌트, SD 스토리지 컴포넌트, 메모리 스틱 스토리지 컴포넌트, 및 xD-픽처 카드 스토리지 컴포넌트와 같은 비휘발성 스토리지 컴포넌트로서 구현된다.
[0194] 다양한 실시예들에서, SSD 제어기(또는 컴퓨팅-호스트 플래시 메모리 제어기) 중 모두 또는 임의의 부분들, 또는 그것의 기능들은 제어기가 커플링될 호스트(예를 들어, 도 1c의 호스트(102))에서 구현된다. 다양한 실시예들에서, SSD 제어기(또는 컴퓨팅-호스트 플래시 메모리 제어기) 중 모두 또는 임의의 부분들, 또는 그것의 기능들은 하드웨어(예를 들어, 로직 회로), 소프트웨어 및/또는 펌웨어(예를 들어, 드라이버 소프트웨어 및/또는 SSD 제어 펌웨어), 또는 이들의 임의의 조합을 통해 구현된다. 예를 들어, (도 1a의 ECC(161) 및/또는 ECC-X(135)와 유사한) ECC 유닛의 기능 또는 그와 연관된 기능은 호스트상의 소프트웨어를 통해 부분적으로 및 SSD 제어기에서 펌웨어와 하드웨어의 조합을 통해 부분적으로 구현된다. 다른 예에 있어서, 예를 들어, (도 1a의 리사이클러(151)와 유사한) 리사이클러 유닛의 기능 또는 그와 연관된 기능은 호스트상의 소프트웨어를 통해 부분적으로 및 컴퓨팅-호스트 플래시 메모리 제어기에서 하드웨어를 통해 부분적으로 구현된다.
동작
[0195] 도 2는 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리의 실시예의 선택된 상세사항들의 흐름도(200)를 예시한다. 도면의 실시예의 동작에 대한 예시적인 시스템 컨텍스트는 호스트에 커플링된 디바이스를 포함하고, 이 호스트상에서 OS가 구동한다. 디바이스는 호스트로부터의 커맨드들에 응답하고, 가시성의 지연을 종료하는 이벤트(예를 들어, 전력 사이클)를 검출하고 이에 응답하도록 인에이블된다. 디바이스는 (펌웨어를 실행하는 제어기와 같이) 펌웨어에 따라 동작한다. 디바이스는 또한 (예를 들어, 펌웨어의 일부를 변경하는 제어기를 통해) 펌웨어를 통해 판독가능하고 기록가능한 선택 확인/식별 정보에 따라 동작한다. 선택 확인/식별 정보("ID 정보(ID Info)"로서 또한 알려짐)는 본 명세서 다른 곳에서 설명하는 확인 및/또는 식별 정보의 하나 또는 그 초과의 서브세트들이고, 이 서브세트들은 실시예들, 사용 시나리오들, 및/또는 디바이스의 동작 모드들에 따라 변한다. 도면에 예시된 바와 같은 흐름은 펌웨어 업데이트들의 효과들의 적어도 일부의 가시성의 지연을 제공하여서, 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리를 인에이블한다.
[0196] ID 정보는 하나 또는 그 초과의 엘리먼트들(예를 들어, 파라미터들, 값들, 및/또는 필드들)을 포함한다. 디바이스가 펌웨어를 통해 부팅하고/하거나 펌웨어를 통해 적어도 부분적으로 선택된 기능을 수행할 때, ID 정보가 참조된다(예를 들어, 판독되고, 기록되거나, 양자 모두 수행된다). 특정한 버전의 펌웨어는 특정한 버전의 ID 정보에 대한 대응성을 갖는다. 예를 들어, 특정한 버전의 펌웨어의 부팅 동안, 특정한 버전의 펌웨어는 ID 정보의 하나 또는 그 초과의 엘리먼트들을 파퓰레이팅(poplulate)하여서, 파퓰레이팅된 ID 정보가 특정한 버전의 펌웨어에 대응한다. 다른 경우에 있어서, 특정한 버전의 펌웨어의 특정한 기능을 수행하는 동안, ID 정보의 하나 또는 그 초과의 엘리먼트들이 기록되어서, 특정한 버전의 펌웨어와 기록된 ID 정보 사이의 대응성을 발생시킨다.
[0197] 도면에 구체적으로 예시되어 있는 바와 같이, 흐름은 디바이스가 펌웨어의 "구형(old)" 버전 및 그 구형 펌웨어에 대응하는 "구형" ID 정보에 따라 동작하는 것으로 시작한다((구형) 펌웨어 (구형) ID 정보 동작(201)). 흐름이 201에서 유지되는 동안, 디바이스가 ID 정보에 의존하는 호스트로부터의 선택 커맨드들에 응답할 때, 디바이스는 구형 ID 정보에 따르는 파퓰레이팅된 ID 정보를 참조한다. 예를 들어, 디바이스가 SATA-호환가능 SSD이면, SATA IDENTIFY 커맨드에 응답하여, 디바이스는 구형 ID 정보로부터 결정된 VPD를 리턴하고, 이 VPD는 예를 들어, 펌웨어 수정 식별자 및/또는 SSP에 영향을 받는 파라미터들을 포함한다.
[0198] 외부 에이전트(예를 들어, 사용자 또는 펌웨어 버전 체킹 툴)가, 예를 들어, 신규 펌웨어의 다운로딩 및 활성화/부팅을 통해 디바이스에 대해 펌웨어 업데이트가 수행되어야 하는지 결정한다. 펌웨어 업데이트는 펌웨어를 업데이트/다운로딩하기 위해 호스트가 커맨드를 디바이스에 이슈하는 것으로 시작하고(커맨드 다운로딩(201D)), 이에 응답하여, 디바이스는 옵션으로 호스트와 함께 신규 펌웨어를 획득한다((신규) 펌웨어 다운로딩(202)). 그 후, 디바이스는 전력 사이클 전까지 파퓰레이팅된 ID 정보의 변경을 방지하기 위해 내부 상태 및/또는 기능을 변경한다(선택 ID 정보 보호(203)).
[0199] 펌웨어 업데이트는 신규 펌웨어와 동작하기 위해 호스트가 커맨드를 디바이스에 이슈하는 것으로 계속되고(커맨드 활성화(203A)), 이에 응답하여, 디바이스는 신규 펌웨어를 활성화하고((신규) 펌웨어 활성화(204)), 신규 펌웨어를 사용하여 부팅한다(디바이스 부팅(205)). 부팅 이후의 파퓰레이팅된 ID 정보는, 파퓰레이팅된 ID 정보가 변경으로부터 보호되기 때문에(203), (구형 펌웨어에 대응하는) 구형 ID 정보에 따른다. 부팅 이후에, 디바이스는 펌웨어의 신규 버전 및 구형 펌웨어에 대응하는 구형 ID 정보에 따라 동작한다((신규) 펌웨어 (구형) ID 정보 동작(206)). 흐름이 206에서 유지되는 동안, 디바이스가 (ID 정보에 의존하는) 호스트로부터의 선택 커맨드들에 응답할 때, 디바이스는 201에서와 같이 구형 ID 정보에 따라 파퓰레이팅된 ID 정보를 참조한다.
[0200] 따라서, 디바이스가 (ID 정보에 의존하는) 선택 커맨드들에 응답할 때, 디바이스는 구형 ID 정보에 따라 파퓰레이팅된 ID 정보를 참조하여서, 펌웨어 업데이트의 효과들 중 적어도 일부의 가시성을 지연시킨다. 실제로, 선택 커맨드들에 관하여, 동일한 ID 정보가 펌웨어 업데이트 이전 및 이후에 참조된다.
[0201] 예를 들어, 디바이스가 SATA-호환가능 SSD이면, SATA IDENTIFY 커맨드에 응답하여, 디바이스는 실제로 구형 ID 정보를 참조하고, 구형 ID 정보로부터 펌웨어 수정 식별자(구형 펌웨어에 대응하는 결정된 펌웨어 수정 식별자)를 결정하며, 구형 펌웨어 수정 식별자를 포함하는 VPD를 리턴한다. 따라서, 동일한 펌웨어 수정 식별자가 펌웨어 업데이트 이전 및 이후에 제공된다. 펌웨어 업데이트 이전 및 이후에 동일한 펌웨어 수정 식별자를 제공하는 것은, 업데이트 이전 및 이후에 제공된 펌웨어 수정 식별자들이 상이한 경우에, OS가 복구불가능한 에러 및 "정지"에 직면하는 상황들에서와 같이, 호스트상에서 구동하는 윈도우 OS의 특정한 버전들이 OS를 재부팅하지 않고 펌웨어 업데이트에 걸쳐 계속 구동할 수 있게 한다.
[0202] 다른 예에 있어서, 디바이스가 SATA-호환가능 SSD이면, SATA IDENTIFY 커맨드에 응답하여, 디바이스는 실제로 구형 ID 정보를 참조하고, 구형 ID 정보로부터 SSD에 영향을 받는 파라미터(구형 펌웨어에 대응하는 SSP에 영향을 받는 결정된 파라미터)를 결정하며, SSP에 영향을 받는 구형 파라미터를 포함하는 VPD를 리턴한다. 따라서, SSP에 영향을 받는 동일한 파라미터가 펌웨어 업데이트 이전 및 이후에 제공된다.
[0203] 흐름은, 신규 펌웨어에 대응하는 정보로 ID 정보의 파퓰레이션을 인에이블하는 전력 사이클 전까지 완료되지 않는다. 전력 사이클은 디바이스 및 호스트를 전력 사이클링하는 것에 대응하고, 따라서, 호스트상의 OS는 전력 사이클링의 일부로서 재부팅된다(OS는 201 내지 206과 연관된 임의의 프로세싱에 관하여 구체적으로 재부팅되지 않는다는 것에 유의한다). 따라서, 흐름은 전력 사이클이 존재할 때 계속되고, 제거되고 재인가되는 전력에 응답하여(전력 사이클(206P)), 디바이스는 파퓰레이팅된 ID 정보의 변경을 인에이블하기 위해 내부 상태 및/또는 기능을 변경한다(선택 ID 정보 보호해제(207)). 그 후, 디바이스는 신규 펌웨어를 사용하여 부팅한다(디바이스 부팅(208)). 부팅 이후의 파퓰레이팅된 ID 정보는, 파퓰레이팅된 ID 정보가 변경을 위해 인에이블되기 때문에(207), (신규 펌웨어에 대응하는) 신규 ID 정보이다. 부팅 이후에, 디바이스는 펌웨어의 신규 버전 및 신규 펌웨어에 대응하는 신규 ID 정보에 따라 동작한다((신규) 펌웨어 (신규) ID 정보 동작(209)). 흐름이 209에서 유지되는 동안, 디바이스가 (ID 정보에 의존하는) 호스트로부터의 선택 커맨드들에 응답할 때, 디바이스는 신규 ID 정보에 따라 파퓰레이팅된 ID 정보를 참조한다. 흐름이 이제 완료되고, 펌웨어 업데이트의 효과들 중 적어도 일부의 가시성의 지연이 종료된다.
[0204] 개념적으로, 209에서의 동작은 201에서의 동작과 등가이다(동작은 서로 대응하는 펌웨어 및 ID 정보에 따른다). 따라서, 209가 201인 것과 같이 또 다른 펌웨어 업데이트가 옵션으로 수행된다.
[0205] 일부 실시예들 및/또는 사용 시나리오들에서, 제 2 펌웨어 업데이트는, 가시성의 지연을 종료하는 이벤트가 제 1 펌웨어 업데이트에 후속하기 이전에 다운로딩된다. 펌웨어 업데이트의 효과들 중 적어도 일부의 가시성의 지연이 제 2 펌웨어 업데이트에 걸쳐 연장된다. 개념적으로, ID 정보는 전력 사이클 전까지 제 2 펌웨어 업데이트의 다운로딩에 걸쳐 더 보존된다.
[0206] 더욱 구체적으로는, 도 2에 관하여 설명한 실시예에서, 제 1 펌웨어 업데이트(제 1 신규 펌웨어)를 수신하였지만, 아직 전력 사이클링되지 않아서, 206에서와 같이 동작하는 디바이스를 고려한다. 그 후, 호스트는 (제 2 신규) 펌웨어를 업데이트/다운로딩하기 위해 커맨드를 디바이스에 이슈하고, 이에 응답하여, 디바이스는 202에서와 같이 (제 2 신규) 펌웨어를 획득한다. 그 후, 디바이스는 203에서와 같이 전력 사이클 전까지 파퓰레이팅된 ID 정보의 변경을 방지하기 위해 내부 상태 및/또는 기능을 변경한다. 보호되는 파퓰레이팅된 ID 정보는 제 1 펌웨어 업데이트의 다운로딩 이전의 파퓰레이팅된 ID 정보와 동일하다. 활성화 및 부팅 이후에, 디바이스는 206에서의 동작과 유사하게, 제 2 신규 펌웨어 및 (제 1 펌웨어 업데이트 이전의 구형 펌웨어에 대응하는) 구형 ID 정보에 따라 동작한다. 파퓰레이팅된 ID 정보가 각각의 펌웨어 업데이트에 걸쳐 보존되도록 각각 프로세싱되는 하나 또는 그 초과의 추가의 펌웨어 업데이트들이 일부 사용 시나리오들에서 전력 사이클 이전에 발생한다.
[0207] 일부 실시예들 및/또는 사용 시나리오들에서, 동작들(202 내지 205) 중 하나 또는 그 초과는 도면에 도시된 바와 상이한 순서로 조합되고/되거나 수행된다. 예를 들어, 202 및 203은, 펌웨어를 다운로딩하기 위한 커맨드가 전력 사이클 뿐만 아니라 펌웨어 업데이팅/다운로딩 전까지 파퓰레이팅된 ID 정보의 변경을 방지하는 것을 포함하도록 디바이스에 의해 해석되도록 조합된다. 다른 예에 있어서, 203은 펌웨어를 다운로딩하기 위한 커맨드에 응답하여 202 이전에 수행된다. 일부 실시예들에서, 204가 신규 펌웨어와 동작하기 위한 커맨드의 수신없이 203에 후속한다. 다른 변동들이 예상된다.
[0208] 도 3은 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리의 다른 실시예의 선택된 상세사항들의 흐름도(300)를 예시한다. 도 3의 실시예는 일부 관점들에서 도 2와 유사하게 동작한다. 도 2의 실시예의 동작에 대한 예시적인 시스템 컨텍스트는 도 3의 실시예에 적용가능하다. 도면에 예시된 바와 같은 흐름은 펌웨어 업데이트들의 효과들의 적어도 일부의 가시성의 지연을 제공하여서, 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리를 인에이블한다.
[0209] 도면에 구체적으로 예시되어 있는 바와 같이, 흐름은 디바이스가 펌웨어의 "구형" 버전 및 그 구형 펌웨어에 대응하는 "구형" ID 정보에 따라 동작하는 것으로 시작한다((구형) 펌웨어 (구형) ID 정보 동작(301)). 흐름이 301에서 유지되는 동안, 동작은 도 2의 201과 유사하여서, 디바이스가 (ID 정보에 의존하는) 호스트로부터의 선택 커맨드들에 응답할 때, 디바이스는 구형 ID 정보에 따라 파퓰레이팅된 ID 정보를 참조한다.
[0210] 또한, 도 2와 유사하게, 외부 에이전트가, 펌웨어 업데이트가 디바이스에 대해 수행되어야 하는지를 결정한다. 그러나 도 2의 실시예와는 달리, 도 3의 실시예에서는, 펌웨어 업데이트는, 호스트가 디바이스로부터의 ID 정보를 호스트에 제공하기 위해 커맨드를 디바이스에 이슈하는 것으로 시작한다(ID 커맨드 판독(301R)). 이에 응답하여, 디바이스는 파퓰레이팅된 ID 정보를 호스트에 전송한다(선택 ID 정보 제공(302)). 펌웨어 업데이트는 펌웨어를 업데이트/다운로딩하기 위해 호스트가 커맨드를 디바이스에 이슈하는 것으로 계속되고(커맨드 다운로딩(302D)), 이에 응답하여, 디바이스는 옵션으로 호스트와 함께 신규 펌웨어를 획득한다((신규) 펌웨어 다운로딩(303)).
[0211] 펌웨어 업데이트는 호스트가 신규 펌웨어로 동작하기 위해 커맨드를 디바이스에 이슈하는 것으로 계속된다(커맨드 활성화(303A)). 이에 응답하여, 디바이스는 신규 펌웨어를 활성화하고((신규) 펌웨어 활성화(304)), 신규 펌웨어를 사용하여 부팅한다(디바이스 부팅(305)). 그러나, 디바이스가 신규 펌웨어로 완전하게 동작하는 것을 시작하기 이전에, 호스트는 호스트로부터 ID 정보를 수신하기 위해 커맨드를 디바이스에 전송한다(ID 커맨드 기록(305W)). 이에 응답하여, 디바이스는 호스트로부터 ID 정보를 수신하고, 수신된 ID 정보를 파퓰레이팅된 ID 정보로서 저장한다(선택 ID 정보 수신(306)). 호스트는 302에서 디바이스가 제공한 것과 동일한 306에서 사용하기 위한 ID 정보를 제공하고, 따라서, 파퓰레이팅된 ID 정보는 구형 ID 정보에 따른다. 그 후, 디바이스는 신규 펌웨어 및 구형 ID 정보에 따라 완전하게 동작하는 것을 시작한다((신규) 펌웨어 (구형) ID 정보 동작(307)). 흐름이 307에서 유지되는 동안, 디바이스가 (ID 정보에 의존하는) 호스트로부터의 선택 커맨드들에 응답할 때, 디바이스는 301에서와 같이 구형 ID 정보에 따라 파퓰레이팅된 ID 정보를 참조한다.
[0212] 따라서, 도 2에서와 같이, 디바이스가 (ID 정보에 의존하는) 선택 커맨드들에 응답할 때, 디바이스는 실제로 구형 ID 정보를 참조하여서, 펌웨어 업데이트의 효과들 중 적어도 일부의 가시성을 지연시키고 펌웨어 업데이트 이전 및 이후의 동일한 ID 정보를 실제로 참조한다. 예를 들어, 동일한 펌웨어 수정 식별자가 펌웨어 업데이트 이전 및 이후에 제공되고, 이것은 업데이트 이전 및 이후에 제공된 펌웨어 수정 식별자들이 상이한 경우에, OS가 복구불가능한 에러 및 "정지"에 직면하는 상황들에서와 같이, (호스트상에서 구동하는) 윈도우 OS의 특정한 버전들이 OS를 재부팅하지 않고 펌웨어 업데이트에 걸쳐 계속 구동할 수 있게 한다. 다른 예에 있어서, SSP에 영향을 받는 동일한 파라미터가 펌웨어 업데이트 이전 및 이후에 제공된다.
[0213] 도 2에서와 같이, 흐름은, 신규 펌웨어에 대응하는 정보로 ID 정보의 파퓰레이션을 인에이블하는 전력 사이클 전까지 완료되지 않는다. 전력 사이클은 디바이스 및 호스트를 전력 사이클링하는 것에 대응하고, 따라서, 호스트상의 OS는 전력 사이클링의 일부로서 재부팅된다(OS는 301 내지 307과 연관된 임의의 프로세싱에 관하여 구체적으로 재부팅되지 않는다는 것에 유의한다). 따라서, 흐름은 전력 사이클이 존재할 때 계속되고, 제거되고 재인가되는 전력에 응답하여(전력 사이클(307P)), 디바이스는 306에 의해 기록된 파퓰레이팅된 ID 정보의 임의의 효과를 제거한다(선택 ID 정보 폐기(308)). 그 후, 디바이스는 신규 펌웨어를 사용하여 부팅한다(디바이스 부팅(309)). 부팅 이후의 파퓰레이팅된 ID 정보는 구형 ID 정보를 제공하기 위해 호스트로부터의 기록 ID 커맨드가 존재하지 않기 때문에 (신규 펌웨어에 대응하는) 신규 ID 정보이고, 파퓰레이팅된 ID 정보는 부팅 동안 신규 ID 정보로 기록된다. 부팅 이후에, 디바이스는 펌웨어의 신규 버전 및 신규 펌웨어에 대응하는 신규 ID 정보에 따라 동작한다((신규) 펌웨어 (신규) ID 정보 동작(310)). 흐름이 310에서 유지되는 동안, 디바이스가 (ID 정보에 의존하는) 호스트로부터의 선택 커맨드들에 응답할 때, 디바이스는 신규 ID 정보에 따라 파퓰레이팅된 ID 정보를 참조한다. 흐름이 이제 완료되고, 펌웨어의 효과들 중 적어도 일부의 가시성의 지연이 종료된다.
[0214] 개념적으로, 310에서의 동작은 301에서의 동작과 등가이다(동작은 서로 대응하는 펌웨어 및 ID 정보에 따른다). 따라서, 310이 301인 것과 같이 또 다른 펌웨어 업데이트가 옵션으로 수행된다.
[0215] 도 2에서와 같이, 도 3에 관한 일부 실시예들 및/또는 사용 시나리오들에서, 제 2 펌웨어 업데이트는, 가시성의 지연을 종료하는 이벤트가 제 1 펌웨어 업데이트에 후속하기 이전에 다운로딩된다. 펌웨어 업데이트의 효과들 중 적어도 일부의 가시성의 지연이 제 2 펌웨어 업데이트에 걸쳐 연장된다. 개념적으로, ID 정보는 제 2 펌웨어 업데이트 이후에 구형 ID 정보로 재-파퓰레이팅된다.
[0216] 더욱 구체적으로는, 도 3에 관하여 설명한 실시예에서, 제 1 펌웨어 업데이트(제 1 신규 펌웨어)를 수신하였지만, 아직 전력 사이클링되지 않아서, 307에서와 같이 동작하는 디바이스를 고려한다. 그 후, 호스트는 302에서와 같이 파퓰레이팅된 정보를 제공하기 위해 커맨드를 디바이스에 이슈함으로써 (제 2 신규) 펌웨어 업데이트를 시작하고, 이에 응답하여, 디바이스는 (제 2 신규) 펌웨어를 획득한다. 펌웨어 업데이트는 (제 2 신규) 펌웨어의 다운로딩, 활성화, 및 부팅으로 계속된다. 그러나, 디바이스가 (제 2 신규) 펌웨어로 완전하게 동작하는 것을 시작하기 이전에, 호스트는 (305W에서와 같이) ID 정보를 수신하기 위해 커맨드를 디바이스에 전송한다. 호스트는 파퓰레이팅된 ID 정보를 제공하기 위해 호스트로부터의 커맨드에 응답하여 디바이스가 이전에 제공한 것과 동일한 사용을 위한 ID 정보를 제공한다. 디바이스는 제공된 ID 정보를 파퓰레이팅된 ID 정보로서 기록하고, 따라서, 파퓰레이팅된 ID 정보는 구형 ID 정보에 따른다. 그 후, 디바이스는 307에서의 동작과 유사하게, 제 2 신규 펌웨어 및 (제 1 펌웨어 업데이트 이전의 구형 펌웨어에 대응하는) 구형 ID 정보에 따라 완전하게 동작하는 것을 시작한다. 파퓰레이팅된 ID 정보가 각각의 펌웨어 업데이트 이후에 구형 ID 정보로 재-파퓰레이팅되도록 각각 프로세싱되는 하나 또는 그 초과의 추가의 펌웨어 업데이트들이 일부 사용 시나리오들에서 전력 사이클 이전에 발생한다.
[0217] 도 3에 의해 예시된 실시예에 대한 개념적인 변경인 일 실시예에서, ID 정보는 예를 들어, SSP에 영향을 받는 하나 또는 그 초과의 파라미터들에 대응한다. 디바이스가 디바이스로부터의 파퓰레이팅된 ID 정보를 판독하지 않고 신규 펌웨어로 완전하게 동작하기 이전에, 호스트는 ID 정보를 디바이스에 명시적으로 제공한다. 이에 응답하여, 디바이스는 제공된 ID 정보를 파퓰레이팅된 ID 정보에 기록한다. 더욱 구체적으로는, 도 3에 관하여 설명한 실시예에서, 301에서와 같이 동작하는 디바이스를 고려한다. 흐름은 호스트가 디바이스에 다운로딩 커맨드를 제공하는 것에 응답하여 301로부터 303으로 직접적으로 진행한다. 그 후, 흐름은 304, 305, 및 306을 따라 진행한다. 306에 관하여, 호스트는 302가 생략되었기 때문에, 디바이스로부터 호스트로 제공된 ID 정보와 독립적인 ID 정보를 제공한다.
[0218] 도 2 및 도 3에 관하여 설명한 상술한 실시예들에서, 가시성의 지연을 종료하는 이벤트는 디바이스가 전력 사이클링되는 것이다(예를 들어, 도 2의 206P 및 도 3의 307P). 이벤트가 디바이스 중 모두 또는 임의의 부분들이 하나의 전력 모드로부터 다른 전력 모드로 천이하고 (예를 들어, 슬립 모드 또는 PHY 전력 관리 모드를 빠져나옴), 디바이스가 판매자 특정 커맨드를 수신하고, 디바이스가 펌웨어 업데이트의 일부로서 특정한 파라미터 및/또는 코드를 수신하고, 링크의 리셋이 디바이스를 호스트에 커플링하는 것 중 어느 하나 또는 그 초과인 다른 실시예들이 예상된다.
[0219] 일부 실시예들 및/또는 사용 시나리오들에서, 동작들(302 내지 306) 중 하나 또는 그 초과는 도면에 도시된 바와 상이한 순서로 조합되고/되거나 수행된다. 예를 들어, 302 및 303은 도시된 바와 상이한 순서로 조합 및/또는 수행되어, 펌웨어를 다운로딩하기 위한 커맨드는 디바이스가 파퓰레이팅된 ID 정보를 호스트로 전송할 뿐만 아니라 펌웨어를 업데이팅/다운로딩하는 것을 포함하는 것으로 디바이스에 의해 해석되고, 디바이스로부터 호스트로 파퓰레이팅된 ID 정보를 제공하기 위한 커맨드는 사용되지 않는다. 다른 예에 있어서, 304는 305와 조합되고, 예를 들어, 디바이스는 신규 펌웨어로 동작하기 위한 커맨드에 응답하여 (명시적 활성화없이) 부팅을 수행한다. 일부 실시예들 및 사용 시나리오들에서, 304가 신규 펌웨어와 동작하기 위한 커맨드의 수신없이 303에 후속한다. 일부 실시예들 및/또는 사용 시나리오들에서, 308이 생략되고, 309는 예를 들어, 이전에 저장된 ID 정보를 겹쳐쓰기하는 것을 통해 ID 정보를 파퓰레이팅한다. 다른 변동들이 예상된다.
[0220] 도 2 및/또는 도 3에 관한 다양한 실시예들에서, (예를 들어, 하나 또는 그 초과의 모드 비트들의 기능, 판매자 특정 커맨드, SSD 제어기에 의해 검출된 펌웨어 이벤트, 또는 이들의 임의의 조합으로서) 디바이스는 전력 사이클에 응답하여 펌웨어 다운로딩, 활성화, 및/또는 부팅 중 어느 하나 또는 그 초과를 옵션으로 수행한다. 예를 들어, 제 1 판매자 특정 커맨드를 수신하는 기능으로서, 디바이스는 아직 현재 실행중이 아닌 새롭게 다운로딩된 펌웨어를 활성화하고 재부팅하기 보다는, 현재 실행중인 펌웨어를 사용하여 부팅한다. 또한, 제 2 판매자 특정 커맨드를 수신하는 기능으로서, 디바이스는 새롭게 다운로딩된 펌웨어를 사용하여 부팅한다.
[0221] 도 2 및/또는 도 3에 관한 다양한 실시예들에서, 디바이스는 펌웨어 업데이트 이후 및 전력 사이클 이전에 신규 ID 정보(예를 들어, 신규 펌웨어에 대응하는 ID 정보)를 호스트에 선택적으로 제공하도록 인에이블된다. (ID 정보에 의존하는) 호스트로부터의 선택 커맨드들은 커맨드들의 2개의 그룹들을 포함한다. 선택 커맨드들의 제 1 그룹은 파퓰레이팅된 ID 정보에 따라 디바이스에 의해 프로세싱되고, 따라서, 펌웨어 업데이트 이후 및 전력 사이클 이전에, 커맨드들의 제 1 그룹은 구형 ID 정보에 따른 ID 정보를 수신한다. 선택 커맨드들의 제 1 그룹은 디바이스가 신규 ID 정보로 응답하는 경우에, 일부 사용 시나리오들에서, OS가 복구불가능한 에러에 직면하는 호스트로부터의 커맨드들, 예를 들어, 응답하여 확인 프레임을 수신하는 커맨드에 대응한다. 선택 커맨드들의 제 2 그룹은 전력 사이클이 펌웨어 업데이트 이후에 발생하였는지에 관계없이, 현재 실행중인 펌웨어에 대응하는 ID 정보에 따라 디바이스에 의해 프로세싱된다. 예를 들어, 206(도 2) 또는 307(도 3)에서 동작하는 동안, 제 2 그룹의 커맨드에 응답하여, 디바이스는 (신규 펌웨어에 대응하는) 신규 ID 정보를 호스트에 제공한다. 신규 ID 정보는, 전력 사이클이 신규 펌웨어의 다운로딩과 부팅 사이에서 발생하였는지에 관계없이, 디바이스가 신규 펌웨어로 부팅할 때 신규 ID 정보로 기록된 것과 같이, 예를 들어, 새도우 VPD 영역 및/또는 로그로부터 제공된다.
[0222] 도 2 및/또는 도 3에 관한 다양한 실시예들에서, 펌웨어 업데이트의 효과들 중 적어도 일부의 가시성의 지연은 하나 또는 그 초과의 모드들을 통해 인에이블(디스에이블)된다. 예를 들어, "지연" 모드에서, 제 1 모드-인에이블된 실시예의 동작이 도 2에 따른다. "비지연(non-delaying) 모드"에서, 제 1 모드-인에이블된 실시예의 동작은, 파퓰레이팅된 ID 정보의 변경의 방지가 없다(예를 들어, 203이 스킵되고, 흐름은 신규 펌웨어로 동작하기 위한 커맨드에 응답하여 202로부터 204로 진행함)는 점을 제외하고는 도 2에 따른다. 그 후, 206에서의 동작은 신규 펌웨어 및 신규 펌웨어에 대응하는 파퓰레이팅된 ID 정보에 따른다. 다른 예에 있어서, "지연" 모드에서, 제 2 모드-인에이블된 실시예의 동작이 도 3에 따른다. "비지연 모드"에서, 제 2 모드-인에이블된 실시예의 동작은, 부팅에 의해 기록된 것으로서 파퓰레이팅된 ID 정보를 남겨두고, ID 정보를 수신하기 위한 호스트로부터 커맨드가 없다(예를 들어, 306이 스킵되고, 흐름은 305로부터 307로 진행함)는 점을 제외하고는 도 3에 따른다. 그 후, 307에서의 동작은 신규 펌웨어 및 신규 펌웨어에 대응하는 파퓰레이팅된 ID 정보에 따른다.
[0223] 도 2 및/또는 도 3에 관한 다양한 실시예들에서, 가장 최근의 펌웨어 업데이트 및/또는 하나 또는 그 초과의 이전의 펌웨어 업데이트들(예를 들어, 업데이트된 펌웨어의 부팅/실행에 의해 생성된 펌웨어 이미지(들) 및/또는 ID 정보)의 결과들이 저장된다. 이전의 펌웨어 업데이트 결과들을 저장하는 것은 예를 들어, 이전의 펌웨어 이미지로부터 부팅함으로써 펌웨어 업데이트 외부로 "롤링백(rolling back)"을 인에이블한다. 이전의 펌웨어 업데이트 결과들을 저장하는 것은, (예를 들어, 이전의 펌웨어 업데이트에 관한) 이전의 ID 정보를 제공하기 위해 디바이스가 (판매자 특정) 호스트 커맨드에 응답할 수 있게 한다. 가장 최근의 펌웨어 업데이트 결과들을 저장하는 것은, 지연된 가시성에 영향을 받는 ID 정보를 제공하기 위해 디바이스가 (판매자 특정) 호스트 커맨드에 응답할 수 있게 한다.
[0224] 도 2 및 도 3에 관한 디바이스 및 호스트의 예들이 도 1b 및 도 1c의 SSD(101) 및 호스트(102) 각각이다. 도 2 및 도 3에 관한 펌웨어에 대한 스토리지의 예가 도 1b 및 도 1c의 펌웨어 스토리지(106)이다. 도 2 및 도 3에 관한 ID 정보 중 모두 또는 임의의 부분들에 대한 스토리지의 예가 도 1b 및 도 1c의 선택 ID 정보 스토리지(107) 중 모드 또는 임의의 부분들이다. "구형" 펌웨어의 예들은 공장 설치 펌웨어, OEM 설치 펌웨어, 및 (예를 들어, 이전의 다운로딩으로부터의) 사용자 설치 펌웨어를 포함한다.
[0225] 다양한 실시예들에서, 도 2 및 도 3에 의해 설명한 동작들 및/또는 기능들 중 모두 또는 임의의 부분들은 예를 들어, 하나 또는 그 초과의 상태 머신들에 의해 구현된다. 상태 머신들의 예시적인 구현들은 하드웨어(예를 들어, 로직 게이트들 및/또는 회로, 전용 상태 머신 회로, 또는 고정배선(hardwired) 제어 회로), 소프트웨어(예를 들어, 펌웨어 또는 마이크로코드), 또는 하드웨어와 소프트웨어의 조합들을 포함한다. 일부 실시예들에서, 상태 머신들 중 하나 또는 그 초과는 업데이팅에 영향을 받는 펌웨어를 통해 적어도 부분적으로 구현된다. 다양한 실시예들에서, 상태 머신들 중 하나 또는 그 초과는 도 1a의 SSD 제어기(100)를 통해 부분적으로, CPU 코어(172)에 의해 실행된 펌웨어를 통해 부분적으로, 및/또는 도 1b 및 도 1c의 펌웨어 스토리지(106)에 저장된 펌웨어를 통해 부분적으로 구현된다.
[0226] 다양한 실시예들에서, 도 2 및 도 3에 의해 설명한 동작들 및/또는 기능들 중 모두 또는 임의의 부분들은 예를 들어, 도 1a의 아이덴티티 관리(182)에 의해 또는 그에 따라 구현된다. 일부 실시예들에서, (도 2의 206P 및 도 3의 307P에 관한 것과 같이) 전력 제거 및 인가는 디바이스의 제어기의 회로에 포함된 전력-온-리셋 회로, 예를 들어, 도 1a의 SSD 제어기(100)에 포함된 회로를 통해 결정된다.
[0227] 다양한 실시예들에서, 도 2 및/또는 도 3에 설명한 바와 같은 ID 정보에 관하여 수행된 하나 또는 그 초과의 동작들(예를 들어, 보호, 보호해제, 제공, 수신, 판독, 또는 기록)은 펌웨어 스토리지(106) 중 모두 또는 임의의 부분들에 액세스하는 것을 포함한다. 예를 들어, 일부 실시예들에서, 도 2의 203 및 207은 (ID 정보를 나타내는 플래그의 세팅 및 클리어링이 변경으로부터 보호되는 것과 같이) 펌웨어 스토리지(106)의 적어도 일부를 기록하는 것을 포함한다. 다른 예에 있어서, 일부 실시예들에서, 도 3의 302 및 306은 펌웨어 스토리지(106)의 적어도 일부를 각각 판독하고 기록하는 것을 포함한다.
[0228] 다양한 실시예들에서, HBA는 호스트의 소자들(하나 또는 그 초과의 프로세서들 및 하나 또는 그 초과의 메모리들)을 디바이스, 예를 들어, SATA 드라이브와 같은 스토리지 드라이브에 커플링한다. 프로세서들 및/또는 메모리들에 대한 HBA의 커플링은 (PCIe 인터페이스와 같은) 하나 또는 그 초과의 디바이스 통신 인터페이스들, 버스들, 및/또는 채널들을 적어도 부분적으로 통한다. 프로세서들 중 일부는 디바이스와 통신하는 OS 및/또는 드라이버 소프트웨어를 실행한다. 일부 실시예들에서, 호스트의 소자들과 HBA 사이의 전송은 AHCI와 호환가능하고, T13 호환가능한 ATA 커맨드들은 HBA를 통해 디바이스의 SSD의 SATA 또는 PCIe 인터페이스로 패스된다. 다른 실시예들에서, 호스트의 소자들과 HBA 사이의 전송은 NVM 익스프레스와 호환가능하고, T13 호환가능한 ATA 커맨드들과 유사한 적어도 일부 속성들을 갖는 커맨드들은 HBA를 통해 디바이스의 SSD의 PCIe 인터페이스로 패스된다. 일부 실시예들에서, HBA는 호스트에 포함되지만, 다른 실시예들에서는, HBA는 디바이스에 포함된다. 일부 실시예들에서, HBA는 생략되고, 디바이스는 (PCIe 인터페이스와 같은) 하나 또는 그 초과의 디바이스 통신 인터페이스들, 버스들, 및/또는 채널들에 (명시적 HBA없이) 커플링된다.
[0229] 예를 들어, 도 1b의 컨텍스트에서, 호스트(102)는 호스트상에서 구동하는 소프트웨어(예를 들어, OS(105) 및/또는 연관된 드라이버들)와 (호스트 인터페이스들(111)에 포함된 SATA 호환가능 호스트 인터페이스를 갖는) SSD(101) 사이의 통신을 인에이블하는 HBA를 포함한다. 통신은 소프트웨어로부터 SSD로의 커맨드들의 전달을 포함한다. 커맨드들의 전송은 AHCI를 통하고, T13 호환가능 ATA 커맨드들은 SSD의 SATA 인터페이스에 제공된다. 따라서, 도 2의 201D 및 203A, 및 도 3의 301R, 302D, 303A, 및 305W는 AHCI 전송을 통해 전달된다.
[0230] 다른 예에 있어서, 도 1c의 컨텍스트에서, 호스트(102)는 중간 제어기(103)와의 통신을 인에이블하는 칩세트를 포함하고, 중간 인터페이스들(104) 및 외부 인터페이스들(110)은 PCIe 호환가능이다(예를 들어, SSD(101)는 호스트 인터페이스들(111)에 포함된 PCIe 인터페이스를 갖는다). 칩세트 및 중간 제어기(103)는 호스트의 OS 및/또는 드라이버 소프트웨어와 SSD(101) 사이에서, 커맨드들의 전달을 포함하는 통신을 인에이블한다. 커맨드들의 전송은 NVM 익스프레스를 통하고, T13 호환가능 ATA 커맨드들과 유사한 적어도 일부 속성들을 갖는 커맨드들은 SSD의 PCIe 인터페이스에 제공된다. 따라서, 도 2의 201D 및 203A, 및 도 3의 301R, 302D, 303A, 및 305W는 NVM 익스프레스 전송을 통해 전달된다.
[0231] 예를 들어, 컴퓨팅 호스트에 커플링된 스토리지 디바이스의 다양한 실시예들을 설명하였고, 스토리지 디바이스는 컴퓨팅 호스트가 볼 때 펌웨어 업데이트 효과들을 관리하도록 인에이블된다. 스토리지 디바이스 및 컴퓨팅 호스트에 적용가능한 기법들은 호스트에 커플링된 디바이스의 다양한 실시예들에 일반적으로 적용가능하고, 디바이스는 호스트가 볼 때 펌웨어 업데이트 효과들을 관리하도록 인에이블된다. 다양한 실시예들은 SSD를 예시적인 스토리지 디바이스로서 설명되었다. SSD 기반 스토리지 디바이스에 적용가능한 기법들은 HDD 기반 스토리지 디바이스 뿐만 아니라 다른 비휘발성 스토리지 기법들에 기초한 스토리지 디바이스들의 다양한 실시예들에 또한 적용가능하다.
예시적인 구현 기법들
[0232] 일부 실시예들에서, 예를 들어, 플래시 메모리들, 컴퓨팅-호스트 플래시 메모리 제어기, 및/또는 (도 1a의 SSD 제어기(100)와 같은) SSD 제어기, 및 프로세서, 마이크로프로세서, 시스템-온-칩, 응용 주문형 집적 회로, 하드웨어 가속기, 또는 상기 언급한 동작들 중 모두 또는 부분들을 제공하는 다른 회로, (SSD가 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리를 제공하는 것과 같은) SSD 제어기에 의해 수행된 동작들 중 모두 또는 일부의 다양한 조합들이 컴퓨터 시스템에 의한 프로세싱과 호환가능한 사양에 의해 특정된다. 그 사양은 하드웨어 디스크립션(description) 언어, 회로 디스크립션들, 네트리스트(netlist) 디스크립션들, 마스크 디스크립션들 또는 레이아웃 디스크립션들과 같은 다양한 디스크립션들에 따른다. 예시적인 디스크립션들은: 베릴로그(Verilog), VHDL, SPICE, PSpice와 같은 SPICE 변형들, IBIS, LEF, DEF, GDS-II, OASIS 또는 다른 디스크립션들을 포함한다. 다양한 실시예들에서, 프로세싱은 하나 또는 둘 이상의 집적 회로들 상의 포함을 위해 적합한 로직 및/또는 회로를 생성하고, 검증하거나 특정하기 위해 해석(interpretation), 컴필레이션, 시뮬레이션 및 합성의 임의의 조합을 포함한다. 다양한 실시예들에 따른 각각의 집적 회로는 다양한 기술들에 따라 설계가능 및/또는 제조가능하다. 기술들은 (필드 또는 마스크 프로그램가능한 게이트 어레이 집적 회로와 같은) 프로그램가능 기술, (전적 또는 부분적 셀-기반 집적 회로와 같은) 세미-커스텀(semi-custom) 기술 및 (실질적으로 특화되는 집적 회로와 같은) 풀-커스텀(full-custom) 기술 및 이들의 임의의 조합 또는 집적 회로들의 설계 및/또는 제조와 호환가능한 임의의 다른 기술을 포함한다.
[0233] 일부 실시예들에서, 한 세트의 명령들이 저장되어 있는 컴퓨터 판독가능한 매체에 의해 설명된 바와 같은 동작들의 전부 또는 일부들의 다양한 조합들은, 하나 또는 둘 이상의 프로그램 명령들의 실행 및/또는 해석에 의해, 하나 또는 둘 이상의 소스 및/또는 스크립트 언어 구문들의 해석 및/또는 컴파일링에 의해, 또는 프로그래밍 및/또는 스크립팅 언어 구문들에 표현된 정보를 컴파일링, 변환, 및/또는 해석함으로써 생성되는 이진 명령들의 실행에 의해 수행된다. 구문들은 (C, C++, 포트란, 파스칼, Ada, Java, VBscript 및 쉘(Shell)과 같은) 임의의 표준 프로그래밍 또는 스크립팅 언어와 호환가능하다. 프로그램 명령들, 언어 구문들 또는 이진 명령들 중 하나 또는 둘 이상은 하나 또는 둘 이상의 컴퓨터 판독가능한 스토리지 매체 엘리먼트들 상에 임의선택적으로 저장된다. 다양한 실시예들에서, 프로그램 명령들 중 일부, 전부 또는 다양한 부분들은 하나 또는 둘 이상의 함수들, 루틴들, 서브-루틴들, 인-라인(in-line) 루틴들, 절차들, 매크로들 또는 이들의 일부들로서 실현된다.
결론
[0234] 단지 텍스트 및 도면들을 준비하는데 편의를 위해 특정 선택들이 설명에서 구성되었으며 반대의 표시가 존재하지 않는 한 그 선택들은 그 자체가, 설명된 실시예들의 구조 또는 동작에 관한 추가적인 정보를 전달하는 것으로서 해석되어서는 안된다. 선택들의 예들은: 실시예들의 특징들 및 엘리먼트들을 식별하고 참조하기 위해 이용되는 엘리먼트 식별자들(예를 들어, 콜아웃들(callouts) 또는 수치적 지시자들)의 특정 구조 또는 할당 그리고 도면 넘버링을 위해 이용되는 지시들의 특정 구조 또는 할당을 포함한다.
[0235] 용어들 "포함하다(includes)" 또는 "포함하는(including)"은 구체적으로, 허용범위가 넓은(open-ended) 범위의 논리적 세트들을 설명하는 추상적 개념들(abstractions)로서 해석되도록 의도되며 용어 "~내의(within)"가 명시적으로 후속하지 않는 한 물리적 제한(physical containment)을 전달하는 것을 의미하지 않는다.
[0236] 전술한 실시예들이 설명 및 이해의 명확화를 목적으로 다소 상세히 설명되었지만, 본 발명은 제공된 상세사항들로 제한되지 않는다. 본 발명의 많은 실시예들이 존재한다. 개시된 실시예들은 예시적이며 제한적이지 않는다.
[0237] 설명에 일치하는 구성, 배열 및 이용에서의 많은 변형들이 가능하며, 이러한 많은 변형들은 발행 특허의 청구항들의 범위 내에 속함이 이해될 것이다. 예를 들어, 상호접속 및 기능-유닛(function-unit) 비트-폭들, 클록 속도들 및 사용되는 기술의 타입은 각 컴포넌트 블록에서의 다양한 실시예들에 따라 가변적이다. 상호접속 및 로직에 정해지는 명칭들은 단지 예시적이며, 설명된 개념들을 제한하는 것으로 해석되어서는 안 된다. 순서도 및 흐름도 프로세스, 동작 및 기능 엘리먼트들의 순서 및 배열은 다양한 실시예들에 따라 가변적이다. 또한, 구체적으로 반대로 서술되지 않는 한, 특정된 값 범위들, 이용된 최대 및 최소 값들 또는 (플래시 메모리 기술 타입들; 및 레지스터들 및 버퍼들에서의 엔트리들 또는 스테이지들의 수와 같은) 다른 특정 사양들은 단지 설명된 실시예들에 대한 것이며, 구현 기술에서의 개선들 및 변경들을 따를(track)것이 예상되며, 제한들로서 해석되어서는 안 된다.
[0238] 기술분야에 알려진 기능적으로 동등한 기술들이, 다양한 컴포넌트들, 서브-시스템들, 동작들, 기능들, 루틴들, 서브-루틴들, 인-라인 루틴들, 절차들, 매크로들 또는 이들의 일부들을 구현하도록, 설명된 것들 대신에 사용가능하다. 실시예의 기능이 (하드웨어에서의 이전의 기능들의 소프트웨어로의 이동을 용이하게 하는) 더 빠른 프로세싱 및 (소프트웨어에서의 이전의 기능들의 하드웨어로의 이동을 용이하게 하는) 더 높은 집적 밀도의 설계 제약들 및 기술 트렌드들에 의존하기 때문에, 실시예들의 다수의 기능적 양상들이 하드웨어(예를 들어, 일반적으로 전용 회로) 또는 소프트웨어(예를 들어, 프로그램된 제어기 또는 프로세서의 일부 방식을 통하여)에서 선택적으로 실현가능하다는 것이 또한 이해된다. 다양한 실시예들에서의 특정한 변형들은, 파티셔닝하는데 있어서의 차이들; 상이한 폼 팩터들 및 구성들; 상이한 운영 시스템들 및 다른 시스템 소프트웨어의 사용; 상이한 인터페이스 표준들, 네트워크 프로토콜들, 또는 통신 링크들의 사용; 및 특정한 애플리케이션의 고유 엔지니어링 및 비즈니스 제약들에 따라 본원에 설명된 개념들을 구현할 때 기대되는 다른 변형들을 포함하지만, 이에 제한되지 않는다.
[0239] 실시예들은 설명된 실시예들의 많은 양상들의 최소 구현을 위해 요구되는 것을 훨씬 넘어선 상세 및 환경적 컨텍스트로 설명되었다. 기술분야의 당업자는 일부 실시예들이 나머지 엘리먼트들 사이의 기본적 협력을 변경하지 않고서 개시된 컴포넌트들 또는 특징들을 생략함을 인식할 것이다. 따라서 개시된 상세사항들 중 다수는 설명된 실시예들의 다양한 양상들을 구현하는데 요구되지 않음이 이해된다. 나머지 엘리먼트들이 종래 기술과 구별가능한 범위까지, 생략되는 컴포넌트들 및 특징들은 본원에 설명된 개념들에 대해 제한하지 않는다.
[0240] 설계에 있어서 이러한 모든 변형들은 설명된 실시예들에 의해 전달되는 교시들에 대한 비현실적(insubstantial) 변경들이다. 본원에 설명된 실시예들은 다른 컴퓨팅 및 네트워킹 애플리케이션들로의 광범위한 적용가능성을 가지며, 설명된 실시예들의 특정 애플리케이션 또는 산업으로 제한되지 않음이 또한 이해된다. 본 발명은 따라서, 발행 특허의 청구항들의 범위 내에 포괄되는 모든 가능한 수정들 및 변형들을 포함하는 것으로 해석된다.

Claims (20)

  1. 디바이스로서,
    비휘발성 메모리;
    컴퓨팅 호스트에 커플링하기 위한 수단;
    제 1 펌웨어, 제 1 펌웨어 수정 식별자, 제 2 펌웨어, 및 제 2 펌웨어 수정 식별자를 저장하기 위해 상기 비휘발성 메모리를 관리하기 위한 수단;
    상기 컴퓨팅 호스트로부터 상기 제 1 펌웨어를 수신하기 위한 수단 - 상기 제 1 펌웨어는 상기 제 1 펌웨어 수정 식별자와 연관됨 -;
    상기 컴퓨팅 호스트로부터 상기 제 2 펌웨어를 수신하기 위한 수단 - 상기 제 2 펌웨어를 수신하기 위한 수단은 상기 제 1 펌웨어를 수신하기 위한 수단 다음에(after) 동작가능하고, 상기 제 2 펌웨어는 상기 제 2 펌웨어 수정 식별자와 연관됨 -; 및
    상기 제 1 펌웨어 수정 식별자를 상기 컴퓨팅 호스트로 리턴하기 위한 수단 - 상기 리턴하기 위한 수단은 상기 컴퓨팅 호스트로부터의 특정한 커맨드 타입에 응답하고, 상기 디바이스가 상기 제 2 펌웨어를 실행하는 동안 및 특정한 이벤트가 발생하기 이전에 동작가능함 -;
    을 포함하고,
    상기 리턴하기 위한 수단의 동작은, 상기 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)으로 하여금, 상기 디바이스가 상기 제 1 펌웨어를 실행하는 내내(throughout) 그리고 특정한 이벤트까지 상기 제 2 펌웨어를 실행하는 동안, 리턴된 펌웨어 수정 식별자의 값에서의 변화에 응답하는 에러를 검출하지 않고, 실행을 계속할 수 있게 하는, 디바이스.
  2. 제 1 항에 있어서,
    상기 특정한 이벤트는 상기 디바이스의 전력 사이클인, 디바이스.
  3. 제 1 항에 있어서,
    상기 제 2 펌웨어 수정 식별자를 상기 컴퓨팅 호스트로 리턴하기 위한 수단을 더 포함하고, 상기 제 2 펌웨어 수정 식별자를 리턴하기 위한 수단은 상기 디바이스가 상기 제 2 펌웨어를 실행하는 동안, 상기 특정한 이벤트가 발생한 이후에, 및 상기 컴퓨팅 호스트로부터의 상기 특정한 커맨드 타입에 응답하여 동작가능한, 디바이스.
  4. 제 1 항에 있어서,
    상기 OS는 윈도우 OS의 버전을 포함하는, 디바이스.
  5. 제 1 항에 있어서,
    상기 특정한 커맨드 타입은 직렬 어드밴스드 기술 부착(Serial Advanced Technology Attachment: SATA) IDENTIFY 커맨드 타입을 포함하는, 디바이스.
  6. 제 1 항에 있어서,
    상기 특정한 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(Vital Product Data: VPD) 커맨드 타입을 포함하는, 디바이스.
  7. 디바이스로서,
    비휘발성 메모리;
    제 1 펌웨어, 제 1 펌웨어 수정 식별자, 제 2 펌웨어, 및 제 2 펌웨어 수정 식별자를 저장하기 위해 상기 비휘발성 메모리를 관리하기 위한 수단 - 상기 디바이스는 컴퓨팅 호스트에 커플링하도록 인에이블됨 -;
    상기 컴퓨팅 호스트로부터 상기 제 1 펌웨어를 수신하기 위한 수단 - 상기 제 1 펌웨어는 상기 제 1 펌웨어 수정 식별자와 연관됨 -;
    상기 컴퓨팅 호스트로부터 상기 제 2 펌웨어를 수신하기 위한 수단 - 상기 제 2 펌웨어를 수신하기 위한 수단은 상기 제 1 펌웨어를 수신하기 위한 수단 다음에 동작가능하고, 상기 제 2 펌웨어는 상기 제 2 펌웨어 수정 식별자와 연관됨 -; 및
    상기 제 1 펌웨어 수정 식별자를 상기 컴퓨팅 호스트로 리턴하기 위한 수단 - 상기 제 1 펌웨어 수정 식별자를 리턴하기 위한 수단은 상기 컴퓨팅 호스트로부터의 제 1 커맨드 타입에 응답하고, 상기 디바이스가 상기 제 2 펌웨어를 실행하는 동안 동작가능함 -; 및
    상기 제 2 펌웨어 수정 식별자를 상기 컴퓨팅 호스트로 리턴하기 위한 수단 - 상기 제 2 펌웨어 수정 식별자를 리턴하기 위한 수단은 상기 컴퓨팅 호스트로부터의 제 2 커맨드 타입에 응답하고, 상기 디바이스가 상기 제 2 펌웨어를 실행하는 동안 동작가능함 -;
    을 포함하고,
    상기 제 1 커맨드 타입은 판독-아이덴티티 커맨드 타입이며,
    상기 제 2 커맨드 타입은 판매자 특정 커맨드 타입인, 디바이스.
  8. 제 7 항에 있어서,
    상기 판매자 특정 커맨드 타입은 판매자 특정 펌웨어 식별 정보 판독 커맨드 타입을 포함하는, 디바이스.
  9. 제 7 항에 있어서,
    상기 판독-아이덴티티 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입을 포함하는, 디바이스.
  10. 제 7 항에 있어서,
    상기 판독-아이덴티티 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 디바이스.
  11. 제 7 항에 있어서,
    상기 판독-아이덴티티 커맨드 타입은 상기 제 2 펌웨어 수정 식별자가 상기 제 1 펌웨어 수정 식별자 대신에 리턴되도록 프로세싱될 때, 상기 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)이 복구불가능한 에러에 직면하는 커맨드 타입을 포함하는, 디바이스.
  12. 제 11 항에 있어서,
    상기 OS는 윈도우 OS의 버전을 포함하는, 디바이스.
  13. 저장 디바이스로서,
    현재 펌웨어 수정 식별자와 연관된 현재 펌웨어에 따라 상기 스토리지 디바이스를 동작시키기 위한 제 1 수단 - 상기 제 1 수단은 상기 스토리지 디바이스와 통신하는 컴퓨팅 호스트에 상기 현재 펌웨어 수정 식별자를 리턴하기 위한 제 2 수단을 포함함 -;
    상기 제 1 수단 다음에 동작가능하고, 상기 현재 펌웨어 수정 식별자와는 상이한 신규 펌웨어 수정 식별자와 연관된 신규 펌웨어를 수신하기 위한 제 3 수단;
    상기 제 3 수단 다음에 동작가능하고, 상기 신규 펌웨어에 따라 상기 스토리지 디바이스를 동작시키기 위한 제 4 수단 - 상기 제 4 수단은 상기 컴퓨팅 호스트에 상기 현재 펌웨어 수정 식별자를 리턴하기 위한 제 5 수단을 포함함 -;
    상기 제 3 수단 다음에 그리고 전력 사이클에 응답하여 동작가능하고, 상기 신규 펌웨어에 따라 상기 스토리지 디바이스를 동작시키기 위한 제 6 수단 - 상기 제 6 수단은 상기 컴퓨팅 호스트에 상기 현재 펌웨어 수정 식별자를 리턴하기 위한 제 7 수단을 포함함 -; 및
    상기 신규 펌웨어의 적어도 일부를 저장하도록 인에이블된 비휘발성 메모리
    를 포함하고,
    상기 리턴하기 위한 3개의 수단들은 상기 컴퓨팅 호스트로부터의 복수의 커맨드 타입들 중 특정한 하나의 각각의 인스턴스에 각각 응답하고, 상기 특정한 커맨드 타입은,
    (a) 제 1 각각의 펌웨어 수정 식별자가 각각의 인스턴스들 중 제 1 인스턴스에 응답하여 상기 컴퓨팅 호스트에 리턴될 때,
    (b) 제 2 각각의 펌웨어 수정 식별자가 상기 각각의 인스턴스들 중 제 2 인스턴스에 응답하여 상기 컴퓨팅 호스트에 리턴될 때, 및
    (c) 리턴되는 상기 제 1 각각의 펌웨어 수정 식별자와 리턴되는 상기 제 2 각각의 펌웨어 수정 식별자 사이에서 발생하는 전력 사이클이 없을 때,
    상기 컴퓨팅 호스트상에서 실행하는 운영 시스템(OS)이 상기 제 2 각각의 펌웨어 수정 식별자의 상기 리턴에 응답하여 복구불가능한 에러에 직면하는 것인, 스토리지 디바이스.
  14. 제 13 항에 있어서,
    상기 OS는 윈도우 OS의 버전을 포함하는, 시스템.
  15. 제 13 항에 있어서,
    상기 특정한 커맨드 타입은 직렬 어드밴스드 기술 부착(SATA) IDENTIFY 커맨드 타입을 포함하는, 시스템.
  16. 제 13 항에 있어서,
    상기 특정한 커맨드 타입은 소형 컴퓨터 시스템 인터페이스(SCSI) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 시스템.
  17. 제 13 항에 있어서,
    상기 특정한 커맨드 타입은 직렬 부착 소형 컴퓨터 시스템 인터페이스(Serial SCSI: SAS) 판독 필수 제품 데이터(VPD) 커맨드 타입을 포함하는, 시스템.
  18. 제 13 항에 있어서,
    상기 수신하기 위한 수단은 상기 전력 사이클까지 상기 현재 펌웨어 수정 식별자를 세이빙하기 위한 수단을 포함하는, 시스템.
  19. 제 13 항에 있어서,
    상기 수신하기 위한 수단은 상기 전력 사이클까지 상기 현재 펌웨어 수정 식별자를 보호하기 위한 수단을 포함하는, 시스템.
  20. 제 13 항에 있어서,
    상기 수신하기 위한 수단은 상기 현재 펌웨어 수정 식별자를 상기 컴퓨팅 호스트에 제공하기 위한 수단 및 상기 현재 펌웨어 수정 식별자를 상기 컴퓨팅 호스트로부터 복원하기 위한 수단을 포함하는, 시스템.
KR1020137034919A 2011-06-07 2012-06-06 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리 KR101466560B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201161494262P 2011-06-07 2011-06-07
US61/494,262 2011-06-07
PCT/US2012/041088 WO2012170521A2 (en) 2011-06-07 2012-06-06 Management of device firmware update effects as seen by a host

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020147018185A Division KR101524096B1 (ko) 2011-06-07 2012-06-06 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리

Publications (2)

Publication Number Publication Date
KR20140010999A true KR20140010999A (ko) 2014-01-27
KR101466560B1 KR101466560B1 (ko) 2014-11-28

Family

ID=47296715

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020147018185A KR101524096B1 (ko) 2011-06-07 2012-06-06 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리
KR1020137034919A KR101466560B1 (ko) 2011-06-07 2012-06-06 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020147018185A KR101524096B1 (ko) 2011-06-07 2012-06-06 호스트가 볼 때 디바이스 펌웨어 업데이트 효과들의 관리

Country Status (6)

Country Link
US (3) US9223563B2 (ko)
EP (1) EP2718828A4 (ko)
JP (1) JP6082389B2 (ko)
KR (2) KR101524096B1 (ko)
CN (3) CN106990977B (ko)
WO (1) WO2012170521A2 (ko)

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9292277B2 (en) * 2009-12-18 2016-03-22 Hewlett-Packard Development Company, L.P. Methods and devices for updating firmware of a component using a firmware update application
WO2012170521A2 (en) 2011-06-07 2012-12-13 Lsi Corporation Management of device firmware update effects as seen by a host
US9235404B2 (en) 2012-06-27 2016-01-12 Microsoft Technology Licensing, Llc Firmware update system
US8972973B2 (en) 2012-06-27 2015-03-03 Microsoft Technology Licensing, Llc Firmware update discovery and distribution
TW201441932A (zh) * 2013-04-19 2014-11-01 Nuvoton Technology Corp 處理裝置與系統程式更新方法
JP2015102889A (ja) 2013-11-21 2015-06-04 レノボ・シンガポール・プライベート・リミテッド ファームウェアの更新方法、電子機器、コンピュータおよびコンピュータ・プログラム
JP6281413B2 (ja) * 2014-05-28 2018-02-21 富士通株式会社 ファームウェア更新装置、ストレージ制御装置およびプログラム
US9626179B2 (en) 2014-07-21 2017-04-18 Sandisk Technologies Llc Method and system for using a ROM patch
US9395975B2 (en) * 2014-07-21 2016-07-19 Sandisk Technologies Llc Method and system for generating a ROM patch
US10430092B1 (en) * 2014-07-28 2019-10-01 Rambus Inc. Memory controller systems with nonvolatile memory for storing operating parameters
JP6484965B2 (ja) * 2014-09-03 2019-03-20 富士通株式会社 ストレージ装置、ファームウェアの更新方法、およびファームウェアの更新プログラム
KR102261815B1 (ko) 2014-10-30 2021-06-07 삼성전자주식회사 펌웨어 업데이트 시간을 줄일 수 있는 데이터 저장 장치, 및 이를 포함하는 데이터 처리 시스템
US9459857B2 (en) 2015-01-21 2016-10-04 HGST Netherlands B.V. Managing wear of system areas of storage devices
KR102400384B1 (ko) * 2015-06-26 2022-05-23 삼성전자 주식회사 외장 메모리를 구비하는 전자장치 및 그 동작 방법
CN111488048B (zh) * 2016-02-14 2023-05-16 华为技术有限公司 一种电源管理方法以及系统
US9913081B1 (en) * 2016-10-13 2018-03-06 GM Global Technology Operations LLC Method and device for communicating with a vehicle system module while conserving power by using two different short range wireless communication (SRWC) protocols
DE102017205274A1 (de) * 2017-03-29 2018-10-04 Robert Bosch Gmbh Verfahren und Vorrichtung zum Aktualisieren eines Programmes
US10747437B2 (en) * 2017-05-02 2020-08-18 Quanta Computer Inc. SAS hard disk drive update via management controller
US20190044809A1 (en) * 2017-08-30 2019-02-07 Intel Corporation Technologies for managing a flexible host interface of a network interface controller
US10642693B2 (en) 2017-09-06 2020-05-05 Western Digital Technologies, Inc. System and method for switching firmware
US10754580B2 (en) * 2017-10-23 2020-08-25 Micron Technology, Inc. Virtual partition management in a memory device
US10642603B2 (en) * 2018-01-16 2020-05-05 Nutanix, Inc. Scheduling upgrades in distributed computing systems
US11099831B2 (en) * 2018-02-08 2021-08-24 Micron Technology, Inc. Firmware update in a storage backed memory system
CN108415862B (zh) * 2018-03-05 2021-06-01 青岛海信宽带多媒体技术有限公司 光模块的通道保存方法、装置及光模块
US10838754B2 (en) 2018-04-27 2020-11-17 Nutanix, Inc. Virtualized systems having hardware interface services for controlling hardware
US20200004522A1 (en) * 2018-06-27 2020-01-02 Hewlett Packard Enterprise Development Lp Selective download of a portion of a firmware bundle
DE102018214451A1 (de) * 2018-08-27 2020-02-27 Robert Bosch Gmbh Verfahren zum Betreiben einer Recheneinrichtung
US10635345B2 (en) 2018-08-31 2020-04-28 Micron Technology, Inc. Live firmware activation in a memory system
US10838711B2 (en) 2018-09-20 2020-11-17 Mellanox Technologies Tlv Ltd. In-service software/firmware update
WO2020131073A1 (en) * 2018-12-20 2020-06-25 Hewlett-Packard Development Company, L.P. Conditional firmware images
CN110704334B (zh) * 2019-09-25 2021-10-15 苏州浪潮智能科技有限公司 一种重要产品数据管理的方法、系统及设备
CN111079124B (zh) * 2019-12-21 2023-02-10 广州小鹏汽车科技有限公司 安全芯片激活方法、装置、终端设备及服务器
US11650743B2 (en) * 2020-02-03 2023-05-16 Dell Products L.P. Updating storage drive firmware
CN113495743A (zh) * 2020-03-19 2021-10-12 瑞昱半导体股份有限公司 储存电路以及运作方法
KR20220033311A (ko) 2020-09-09 2022-03-16 삼성전자주식회사 전자 디바이스 및 이의 동작 방법과 네트워크 시스템
US11741232B2 (en) 2021-02-01 2023-08-29 Mellanox Technologies, Ltd. Secure in-service firmware update
US11750522B2 (en) * 2021-04-19 2023-09-05 Avago Technologies International Sales Pte. Limited System and method for reducing congestion in a network
US11513787B1 (en) * 2021-06-14 2022-11-29 EMC IP Holding Company LLC Non-disruptive firmware upgrade of asymmetric hardware accelerator systems
US11709667B2 (en) 2021-06-14 2023-07-25 EMC IP Holding Company LLC Non-disruptive firmware upgrade of symmetric hardware accelerator systems
US11922170B2 (en) 2021-06-28 2024-03-05 Samsung Electronics Co., Ltd. Systems and method for bootup activation of firmware images
US11899945B2 (en) 2021-10-03 2024-02-13 Silicon Motion, Inc. Method and apparatus for performing communications specification version control of memory device in predetermined communications architecture with aid of compatibility management, and associated computer-readable medium

Family Cites Families (66)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5432927A (en) * 1992-06-17 1995-07-11 Eaton Corporation Fail-safe EEPROM based rewritable boot system
JP3437083B2 (ja) * 1998-02-23 2003-08-18 富士通株式会社 入出力制御装置およびそのファームウェア更新方法
US6237091B1 (en) * 1998-10-29 2001-05-22 Hewlett-Packard Company Method of updating firmware without affecting initialization information
JP2001216167A (ja) * 2000-02-04 2001-08-10 Minolta Co Ltd 本体と周辺装置からなるシステム
JP2001331327A (ja) * 2000-05-24 2001-11-30 Matsushita Electric Ind Co Ltd 電子機器
US7065769B1 (en) 2000-06-30 2006-06-20 Intel Corporation Method for automatically installing and updating drivers
JP2002244874A (ja) * 2001-02-15 2002-08-30 Toshiba Corp 情報処理装置およびファームウェア更新方法
GB0116568D0 (en) * 2001-07-06 2001-08-29 Ncipher Corp Ltd Firmware validation
US7320126B2 (en) * 2001-11-06 2008-01-15 Sandisk Corporation Implementation of in system programming to update firmware on memory cards
JP4189570B2 (ja) * 2001-12-28 2008-12-03 コニカミノルタビジネステクノロジーズ株式会社 画像処理装置、ファームウェアの送信方法、及び画像処理装置の管理システム
JP3880407B2 (ja) * 2002-01-25 2007-02-14 キヤノン株式会社 情報処理装置およびユーザインターフェースを制御する方法
TW591524B (en) * 2002-03-13 2004-06-11 Insyde Software Corp Updating method of keyboard controller in notebook computer
US20040083469A1 (en) * 2002-10-23 2004-04-29 Ping-Sheng Chen Method for updating firmware of optical disk system
US20040236932A1 (en) * 2003-05-20 2004-11-25 Zhahong Zhang Apparatus and method for firmware upgrade in microprocessor-based processing units
US7222339B2 (en) * 2003-06-13 2007-05-22 Intel Corporation Method for distributed update of firmware across a clustered platform infrastructure
US20050028172A1 (en) 2003-07-30 2005-02-03 Matsushita Electric Industrial Co., Ltd. Method and apparatus for installing software
US7865907B2 (en) 2003-09-25 2011-01-04 Fisher-Rosemount Systems, Inc. Method and apparatus for providing automatic software updates
TWI229818B (en) * 2003-12-15 2005-03-21 Wistron Corp Method and device for updating firmware
KR100987628B1 (ko) * 2004-02-07 2010-10-13 엘지전자 주식회사 엠비디드 컨트롤러의 펌웨어 갱신방법 및 갱신용 펌웨어저장매체
US7904895B1 (en) * 2004-04-21 2011-03-08 Hewlett-Packard Develpment Company, L.P. Firmware update in electronic devices employing update agent in a flash memory card
WO2005116827A1 (en) * 2004-05-31 2005-12-08 Stmicroelectronics Pvt. Ltd. A method for remotely upgrading the firmware of a target device using wireless technology
US7334117B2 (en) * 2004-08-04 2008-02-19 National Instruments Corporation Device boot loader for processing one or more requests from a host computer system concurrently with loading or updating the firmware of the device
KR100594305B1 (ko) * 2004-12-17 2006-06-30 삼성전자주식회사 시리얼 ata 인터페이스를 이용하여 광학 디스크드라이버의 프로그램 코드를 업데이트하는 장치 및 그 방법
US8181020B2 (en) * 2005-02-02 2012-05-15 Insyde Software Corp. System and method for securely storing firmware
JP4679943B2 (ja) * 2005-03-23 2011-05-11 ヒタチグローバルストレージテクノロジーズネザーランドビーブイ データ記憶装置及びその不揮発性メモリ内データ書き換え処理方法
US7748031B2 (en) * 2005-07-08 2010-06-29 Sandisk Corporation Mass storage device with automated credentials loading
JP2007025933A (ja) * 2005-07-14 2007-02-01 Hitachi Ltd ストレージシステム及びそのファームウェア自動更新方法
US20070288986A1 (en) * 2006-06-13 2007-12-13 Candelore Brant L Method and system for downloading content to a target device
KR100775431B1 (ko) * 2006-02-20 2007-11-12 삼성전자주식회사 임베디드 시스템 및 임베디드 시스템의 펌웨어 업데이트방법
US8707290B2 (en) * 2006-02-22 2014-04-22 Dell Products L.P. Firmware update in an information handling system employing redundant management modules
CN100570558C (zh) * 2006-03-31 2009-12-16 联想(北京)有限公司 一种芯片固件升级方法
US8707297B2 (en) * 2006-07-26 2014-04-22 Dell Products L.P. Apparatus and methods for updating firmware
KR100801014B1 (ko) * 2006-08-21 2008-02-04 삼성전자주식회사 Dos 부트 프로그램을 내장한 디스크를 구비하는 하드 디스크 드라이브와 그를 포함하는 컴퓨터 시스템, 상기 하드 디스크 드라이브의 펌웨어 다운로드 방법 및 그를 포함하는 기록 매체
US8010959B2 (en) * 2006-11-29 2011-08-30 Sony Ericsson Mobile Communications Ab System and method for updating device drivers
US8046776B1 (en) * 2006-11-30 2011-10-25 Marvell International Ltd. Method and apparatus for transferring firmware between an operating system device in a host
KR100800589B1 (ko) * 2006-12-20 2008-02-04 엘지전자 주식회사 정보 처리 장치 및 그 운용방법
US8776037B2 (en) * 2007-01-04 2014-07-08 International Business Machines Corporation Apparatus and method to update multiple devices disposed in a computing system
CN101291231A (zh) * 2007-04-17 2008-10-22 鸿富锦精密工业(深圳)有限公司 网络设备及其重启方法
KR20090023863A (ko) * 2007-09-03 2009-03-06 엘지이노텍 주식회사 펌웨어 업데이트 시스템 및 방법
JP2009116772A (ja) * 2007-11-09 2009-05-28 Hitachi-Lg Data Storage Inc 光ディスク装置、および、そのファームウェア更新方法
KR20090060774A (ko) * 2007-12-10 2009-06-15 한국전자통신연구원 임베디드 시스템의 펌웨어 및 데이터 미러링 장치 및 방법
US8201161B2 (en) * 2008-01-07 2012-06-12 Lenovo (Singapore) Pte. Ltd. System and method to update device driver or firmware using a hypervisor environment without system shutdown
US7975084B1 (en) * 2008-02-06 2011-07-05 American Megatrends, Inc. Configuring a host computer using a service processor
US20090254898A1 (en) * 2008-04-08 2009-10-08 Microsoft Corporation Converting a device from one system to another
US8122298B2 (en) * 2008-06-12 2012-02-21 Lsi Corporation Methods and systems for capturing error information in a SATA communication system
US8250246B2 (en) * 2008-07-09 2012-08-21 Finisar Corporation Loading and executing firmware module without resetting operation
US8694989B1 (en) * 2008-07-17 2014-04-08 Apple Inc. Virtual installation environment
US8332839B2 (en) * 2008-08-15 2012-12-11 Lsi Corporation Method and system for modifying firmware image settings within data storage device controllers
JP5102918B2 (ja) * 2008-09-02 2012-12-19 株式会社日立製作所 ストレージ装置及びファームウェア更新指示方法
US20100064048A1 (en) * 2008-09-05 2010-03-11 Hoggan Stuart A Firmware/software validation
US8566571B2 (en) * 2008-12-12 2013-10-22 Novell, Inc. Pre-boot securing of operating system (OS) for endpoint evaluation
US8856776B2 (en) * 2009-02-05 2014-10-07 International Business Machines Corporation Updating firmware without disrupting service
JP5342302B2 (ja) * 2009-03-30 2013-11-13 株式会社日立ソリューションズ ファームウェア更新システム、ファームウェア配信サーバ、及びプログラム
JP5478986B2 (ja) * 2009-08-21 2014-04-23 株式会社日立ソリューションズ 情報機器及びプログラム
US8214653B1 (en) * 2009-09-04 2012-07-03 Amazon Technologies, Inc. Secured firmware updates
US9565207B1 (en) * 2009-09-04 2017-02-07 Amazon Technologies, Inc. Firmware updates from an external channel
US8971538B1 (en) * 2009-09-08 2015-03-03 Amazon Technologies, Inc. Firmware validation from an external channel
US8381264B1 (en) * 2009-09-10 2013-02-19 Amazon Technologies, Inc. Managing hardware reboot and reset in shared environments
US8589302B2 (en) * 2009-11-30 2013-11-19 Intel Corporation Automated modular and secure boot firmware update
US20120110562A1 (en) * 2010-10-27 2012-05-03 David Heinrich Synchronized firmware update
US9146726B2 (en) * 2010-12-16 2015-09-29 Netapp, Inc. System and method for firmware update for network connected storage subsystem components
WO2012170521A2 (en) 2011-06-07 2012-12-13 Lsi Corporation Management of device firmware update effects as seen by a host
US8966466B2 (en) * 2012-04-04 2015-02-24 Avago Technologies General Ip (Singapore) Pte. Ltd. System for performing firmware updates on a number of drives in an array with minimum interruption to drive I/O operations
CN102855151B (zh) * 2012-08-21 2016-06-08 武汉电信器件有限公司 不打断业务的光模块固件在应用升级方法
BR112015016953A2 (pt) * 2013-01-15 2017-07-11 Hewlett Packard Development Co atualização de firmware dinâmico
US9355674B2 (en) * 2013-07-19 2016-05-31 Seagate Technology Llc Data storage device and system having adaptive brownout detection

Also Published As

Publication number Publication date
EP2718828A2 (en) 2014-04-16
JP2014519662A (ja) 2014-08-14
US10365920B2 (en) 2019-07-30
KR101466560B1 (ko) 2014-11-28
JP6082389B2 (ja) 2017-02-15
KR20140092413A (ko) 2014-07-23
CN106990977A (zh) 2017-07-28
CN103620567A (zh) 2014-03-05
CN105159699B (zh) 2022-01-25
US9223563B2 (en) 2015-12-29
EP2718828A4 (en) 2014-11-05
US20140189673A1 (en) 2014-07-03
WO2012170521A3 (en) 2013-02-21
CN106990977B (zh) 2023-09-15
WO2012170521A2 (en) 2012-12-13
US20180004504A1 (en) 2018-01-04
KR101524096B1 (ko) 2015-06-01
US9766878B2 (en) 2017-09-19
US20160085541A1 (en) 2016-03-24
CN105159699A (zh) 2015-12-16

Similar Documents

Publication Publication Date Title
US10365920B2 (en) Management of device firmware update effects as seen by a host
US10936251B2 (en) I/O device and computing host interoperation
KR101467941B1 (ko) 비휘발성 저장부에 대한 가변 오버­프로비저닝
KR102155191B1 (ko) 비휘발성 메모리에 대한 기록들의 관리 및 그 기록들의 영역 선택
US8938624B2 (en) Encryption key destruction for secure data erasure
US9461904B2 (en) Selective enablement of operating modes or features via host transfer rate detection
KR101537973B1 (ko) 보안 스토리지 하이잭킹 보호를 위한 기법들
US9396104B1 (en) Accessing compressed data of varying-sized quanta in non-volatile memory

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
A107 Divisional application of patent
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20171030

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190123

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190918

Year of fee payment: 6