SafeFLASH

HCC Embedded » File systems » SafeFLASH

SafeFLASH는 임베디드 어플리케이션을 위한 100 % 안전한 파일시스템으로 철저하게 고성능으로 설계되었습니다. 그것은 모든 NOR 및 NAND 플래시 타입뿐 아니라 블록구조 배열을 시뮬레이션할 수 있는 모든 미디어와 함께 사용할 수 있습니다. SafeFLASH 매우 쉽게 이식할 수 있도록 설계되었습니다. 그것은 어떤 RTOS와도 쉽게 통합하고 많은 고객을 통해서 입증되었습니다. 파일 API는 완벽한 표준이며 Low level 인터페이스는 가장 간단한 포팅 레이어로 추출됩니다.
 

Fail Safety
SafeFLASH는 파일시스템이 항상 일관된 상태로 유지하는 방법으로 시스템의 예기치 않은 리셋을 처리하도록 설계되어 복잡한 에러 복구는 필요치 않습니다. 항상 파일의 메타-데이터와 일치하는 상태를 이루며 파일이 Flush 또는 Close 될 때 자동으로 새로운 상태로 전환됩니다. 파일내 검색 등과 같은 복잡한 작업은 안전하게 제어하고 변화요소를 포함한 mirrors sectors 처리를 효율적으로 사용합니다.
데이터 일관성에 대해 걱정하거나 복잡한 오류 복구를 요청할 필요가 절대 없습니다.
왜냐하면 시스템이 항상 일치시키기 때문입니다!

Supported Devices
SafeFLASH는 NOR 플래시, NAND 플래시, SD Card 및 DataFlash 등을 포함하여 매우 광범위하게 지원하고 있습니다. 모든 플래시 디바이스에 SafeFLASH를 사용할 수 있습니다. Low-Level porting시 특정 새로운 디바이스에 대해서만 필요하다고 할 수 있으며 일반적으로 이러한 지원 노력은 단 몇 시간에 불과합니다.

SafeFLASH 사용자 설명서에 포팅에 대한 자세한 섹션이 포함되어 있습니다.

Standard File API
SafeFLASH API는 표준이며 일반 사용자가 바로 사용할 수 있을 정도로 익숙하게 만들었습니다. 이러한 Routines으로 완벽한 와일드 카드를 지원하고 파일 및 디렉토리를 쉽게 초기화 및 관리합니다. 다른 플랫폼에서 사용된 어플리케이션들은 수정없이SafeFLASH를 사용할 수 있습니다.

Features

HCC-Embedded 사의 SafeFLASH 파일시스템은 NOR 또는 NAND 플래시 디바이스에서 안정성 높은 수준을 요구하는 임베디드 시스템에서 사용되고 있습니다. 시스템은 전혀 예상치 못한 전원 장애 또는 리셋으로부터 완벽하게 보호됩니다.
  • 100% safe against power failure
  • Long filenames
  • Multiple volumes
  • Directory handling
  • Multiple files open simultaneously
  • Unicode16 support
  • Mix of media types
  • Erase suspend/resume
  • Wear-leveling (static and dynamic)
  • ECC algorithms
  • Bad block handling
  • Standard file API
  • Reserved sectors
  • ANSI C compliant C source
  • Sample application code
  • Sample drivers for several NOR and NAND devices
  • Detailed implementation guide
SafeFLASH is designed for the easy integration and configuration of new memory types. HCC provides free consultancy for adding new device types or modifying existing ones. Also available is hardware reference design information.

Power-Fail

SafeFLASH is a 100% power-failsafe system.


Why is it needed?

동작의 기본 방법은 매우 간단합니다 : 모든 정보가 삭제되기 전에 완전한 새 파일시스템을 사용할 수 있어야 합니다. 이러한 방법을 이용하여 최악의 상황이 발생한다면, 시스템은 사전 작성 양식(Pre-write form:쓰기전 처음단계) 또는 새로운 수정사항 포함하여 리빌드할 수 있어야 합니다. 이것은 DOS 호환 파일시스템(따라서, 디스크 복구 소프트웨어의 유포)과 많은 다른 파일 시스템에서 보장할 수 없습니다.

“쓰기” 전에 삭제된 섹터를 요구하는 플래시 디바이스와 함께 효율적으로 구현하는 컨셉은 상대적으로 심플합니다. 쓰고 지우는 시간이 플래시 디바이스에서 상대적으로 길 수 있어서 이 작업의 개수를 최소화하는 게 매우 중요합니다. SafeFLASH는 섹터당 Write/Erase시에 그 성능이 뛰어납니다.

How is it verified?
 
검증하는 주요 방법 중 하나는 파일시스템의 PC 시뮬레이션을 통해서 수천개의 테스트 케이스를 비교적 쉽게 실행할 수 있습니다. 이 모드에서 코드는 시뮬레이션 NOR 및 NAND 플래시 디바이스에서 실행되며 일부지점 또는 랜덤하게 정지하여 데이터가 손실되는지 혹은 시스템이 안정적으로 다시 시작하는지를 확인합니다.

많은 테스트는 실제 NOR와 NAND 플래시에서 반복적인 코드의 특정위치에 Breakpointing 하면서 이루어졌습니다. 그리고 바로 시스템을 재시작하여 시스템의 데이터 손실은 없는지 정상적으로 동작하는지를 검증합니다.

Performance

SafeFLASH is a high -performance solution.

플래시 디바이스는 특별한 특성을 가지고 있습니다. 특히, “쓰기”와 “지우기” 시간이 비교적 오래 걸립니다. 또한 디바이스를 반복적인 사용하여 Bad Blocks의 원인이 되는 마모(wear) 문제가 있습니다.

SafeFLASH는 플래시 디바이스의 가장 효율적인 사용을 위해 섬세한 기술로 만들었습니다. 그것은 FTL(Flash Translation Layer)를 사용하지 않습니다. 대신에 플래시 디바이스 그 자체에 직접적으로 작동합니다. 특히 정교한 쓰기 캐싱 시스템은 변경시에만 File descriptor Tables이Flash에 저장되도록 개발되었습니다. 이러한 방법으로 플래시 칩 사용을 최소로 하여 수행할 수 있기 때문에 많은 업데이트가 가능합니다.

This is all done while preserving the 100% power-fail resilience of the system!

알고리즘 또한 인터럽트 쓰레드에 의해서 삭제될 수 있도록 “삭제 중지/재시작(Erase suspend/resume)” 블럭의 사용을 지원하기 위해서 제공됩니다. 추가적으로, 로직은 여전히 효율적인 마모 알고리즘(Wear Algorithms)으로 유지되면서 우선적으로 Pre-erased 블럭을 선택하기 위해서 포함되어 있습니다.

SafeFLASH는 플래시를 과다하게 사용하지 않고 가능한 효율적으로 실행하기 위해 많은 알고리즘을 사용합니다. 그리고, SafeFLASH의 직접적인 “삭제”/”쓰기” 체계는 플래시 디바이스의 사용을 최소한으로 줄였습니다.

SafeFLASH는 임베디드 데이터베이스 소프트웨어에서 광범위하게 테스트 되었으며 가장 불리한 어플리케이션 환경에서도 고성능을 보장하기 위해 데이터베이스와 함께 테스트하면서 최적화 시켰습니다.

NOR Flash

SafeFLASH is designed to support all types of standard NOR flash.


General
NOR 플래시는 대부분의 임베디드시스템의 기본 구성요소(Building blocks)중 하나로 비휘발성 데이터와 코드를 저장하는데 사용됩니다. NOR 플래시는 반드시 쓰기전에 삭제해야 하며 지우는 시간이 비교적 긴 편입니다.

Wear-leveling
Flash는 과도하게 사용할 때 더 악화됩니다. 만약 제조업체의 사양 이상으로 특정 블럭을 사용하게 되면 결국에는 실패할지도 모릅니다. 이를 방지하기 위해서, Wear-Level 알고리즘은 단계별 블럭 사용을 보장하기 위해 구현됩니다. 게다가 SafeFLASH의 변경사항을 File descriptors에 기록할 때(Recording), 플래시 디바이스의 사용(Writing 의미)을 최소한으로 줄였습니다.

Bad-Block Management
Bad blocks은 시간이 지남에 따라 디바이스내에서 늘어날지도 모릅니다. 이러한 Bad blocks을 자동으로 감지하고 파일 시스템 밖으로 보내서 관리합니다.

Reserved Sectors
이것은 종종 파일시스템의 외부에서 특별한 목적을 위하여 플래시 디바이스의 섹션을 예약하는 것이 필요합니다. 이것은 “Private” 사용을 위해서 사용 가능한 블럭드라이버의 지정에 의해서 이루어집니다. 표준 Low-Level에서 “읽기”/”쓰기”/”지우기” 루틴은 여전히 이러한 블럭을 액세스할 때 사용합니다.

Flash Arrays
시스템에서 병렬로 Data bus를 넓혀 높은 성능을 내거나 일련의 저장장치의 크기를 키워서 다중 플래시 디바이스를 사용할 수 있습니다. 이것은 완벽하게 SafeFLASH에서 지원하고 있고 유일하게 드라이버에 설정 변경에 의존하고 있습니다.

Sample Drivers
다른 제조회사의 다양한 플래시 디바이스를 위한 샘플 드라이버의 범위가 시스템과 함께 제공됩니다. 샘플 드라이버는 어떠한 칩/하드웨어 환경에서도 쉽게 포팅할 수 있도록 개발자 가이드 문서에 자세하게 설명되어 있습니다.

Devices Supported
정말로 약간의 다른 특성(단, 동일한 기본 속성은 유지)을 포함한 수천개의 NOR 플래시 디바이스에서 사용하실 수 있습니다.

SafeFLASH는 유명한 제조회사의 디바이스를 포함하여 지원:

  • AMD/Fujutsi/Spansion flash chips including MirrorBit technology and part number 29xxxxxxx
  • Intel StrataFlash
  • Atmel devices including small memory devices
  • Sharp
  • SST including 25 and 39 series
  • Toshiba
위의 디바이스에 대한 샘플 드라이버를 제공합니다.

NAND Flash

SafeFLASH is designed to support all types of standard NAND flash.
 

General
NAND 플래시는 대량의 비휘발성 데이터를 저장하기 위해 설계된 비교적 새로운 플래시 기술입니다. NAND 플래시는 이미 삭제된 경우에만 작성할 수 있습니다.
NOR에 비해서 지우는 작업은 더 빠르지만 여전히 꽤 오래 걸립니다.
NAND 플래시는 종종 몇개 이하의 Bad Blocks 을 포함하여 제공됩니다. NAND 플래시는 모든 단일비트(Single bit) 오류를 감지하고 수정하는 경우에 안정성이 크게 증가합니다.

Wear-leveling
Flash는 과도하게 사용할 때 더 악화됩니다. 만약 제조업체의 사양 이상으로 특정 블럭을 사용하게 되면 결국에는 실패할지도 모릅니다. 이를 방지하기 위해서, Wear-Level 알고리즘은 단계별 블럭 사용을 보장하기 위해 구현됩니다. 게다가 SafeFLASH의 변경사항을 File descriptors에 기록할 때(Recording), 플래시 디바이스의 사용(Writing 의미)을 최소한으로 줄였습니다.

Bad-Block Management
Bad blocks은 시간이 지남에 따라 디바이스내에서 늘어날지도 모릅니다. 이러한 Bad blocks을 자동으로 감지하고 파일 시스템 밖으로 보내서 관리합니다.

ECC Algorithms
고효율적인 ECC 알고리즘은 시스템과 함께 제공됩니다. 이것은 하드웨어 또는 소프트웨어로 구현할 수 있습니다.
알고리즘은 자동으로 모든 단일 비트 에러(Single bit errors)를 수정하여 결론적으로 실질적인 장치의 신뢰성 향상을 가져옵니다.

Reserved Sectors
이것은 종종 파일시스템의 외부에서 특별한 목적을 위하여 플래시 디바이스의 섹션을 예약하는 것이 필요합니다. 이것은 “Private” 사용을 위해서 사용 가능한 블럭드라이버의 지정에 의해서 이루어집니다. 표준 Low-Level에서 “읽기”/”쓰기”/”지우기” 루틴은 여전히 이러한 블럭을 액세스할 때 사용합니다.

Flash Arrays
시스템에서 병렬로 Data bus를 넓혀 높은 성능을 내거나 일련의 저장장치의 크기를 키워서 다중 플래시 디바이스를 종종 사용하는 것은 유용합니다. 이것은 완벽하게 SafeFLASH에서 지원하고 있고 유일하게 드라이버에 설정 변경에 의존하고 있습니다.

Sample Drivers
다른 제조회사의 다양한 플래시 디바이스를 위한 샘플 드라이버의 범위가 시스템과 함께 제공됩니다. 샘플 드라이버는 어떠한 칩/하드웨어 환경에서도 쉽게 포팅할 수 있도록 개발자 가이드 문서에 자세하게 설명되어 있습니다.

Supported Devices
약간의 다른 특성(단, 동일한 기본 속성은 유지)을 포함한 많은 NAND 플래시 디바이스에서 사용할 수 있습니다.

SafeFLASH는 유명한 칩 제조회사의 디바이스를 포함하여 지원 :

  • Samsung
  • Hitachi
  • Toshiba
  • Micron
  • ST Micro

삼성, ST Micro, Micron 디바이스를 위한 샘플 드라이버를 제공합니다.

Atmel DataFlash

SafeFLASH supports all types of Atmel DataFlash®

Introduction

ATMEL사의 DataFlash 디바이스는 안정적인 방법과 믿음이 가게끔 사용하기 어렵게 만드는 특별한 특정이 있습니다. 특히 만약 섹터의 페이지 10,000번 쓰여졌다면, 시스템은 섹터에 있는 모든 페이지가 해당 기간동안 새로 작성되었는지를 확인해야 합니다. 추가적으로, 만약 이 과정에서 전원이 손실된다면 데이터의 임의 페이지가 시스템에서 손실될 수 있기 때문에 간단한 복사/삭제 그리고 Copyback 매커니즘을 신뢰할 수 없습니다. HCC에서는 이러한 문제들을 관리하고 ATMEL사의 DataFlash에 신뢰적인 파일시스템을 사용할 수 있도록 신뢰적이고 안전한 드라이버를 제공하고 있습니다.

Wear-leveling
Flash는 과도하게 사용할 때 더 악화됩니다. 만약 제조업체의 사양 이상으로 특정 블럭을 사용하게 되면 결국에는 실패할지도 모릅니다. 이를 방지하기 위해서, Wear-Level 알고리즘은 단계별 블럭 사용을 보장하기 위해 구현됩니다. 게다가 SafeFLASH의 변경사항을 File descriptors에 기록할 때(Recording), 플래시 디바이스의 사용(Writing 의미)을 최소한으로 줄였습니다.

Reserved Sectors
이것은 종종 파일시스템의 외부에서 특별한 목적을 위하여 플래시 디바이스의 섹션을 예약하는 것이 필요합니다. 이것은 “Private” 사용을 위해서 사용 가능한 블럭드라이버의 지정에 의해서 이루어집니다. 표준 Low-Level에서 “읽기”/”쓰기”/”지우기” 루틴은 여전히 이러한 블럭을 액세스할 때 사용합니다.

SPI Sample Drivers
간단한 SPI 드라이버는 시스템과 함께 제공됩니다. 이 부분이 Target에 포팅해야 하는 유일한 것입니다.
개발자 가이드를 통해서 단계별로 쉽게 포팅할 수 있습니다.

Devices Supported
ATMEL사의 모든 DataFlash 를 지원하고 있습니다 :
  • AT45DB011B
  • AT45DB021B
  • AT45DB041B
  • AT45DB081B
  • AT45DB161B
  • AT45DB161D
  • AT45DB321B
  • AT45DB642
  • AT45DB642B
  • AT45DB642D (including both page modes)
특정 DataFlash 디바이스 타입은 드라이버의 “정의(definition)”를 통해 선택할 수 있습니다.

Other devices

SafeFLASH는 유연한 아키텍처를 가지고 있습니다. 그것은 어떤 디바이스에서도 사용할 수 있고 높은 수준의 안정성을 유지할 수 있습니다.

드라이버와 파일시스템간의 인터페이스가 명확하게 정의됩니다. 모든 디바이스는 블럭 아키텍쳐를 제공하고 “읽기”, “쓰기”, “지우기” 섹터를 위한 함수를 가지고 있고 쉽게 통합할 수 있습니다. 드라이버는 사용할 수 있는 블럭의 논리적 설명을 파일시스템에 제공해야 합니다. 개발자 가이드를 통해서 필요한 인터페이스 함수에 대한 자세한 정보를 제공합니다. 또한 RAM 드라이브(개발시 참조)가 제공됩니다.

USB Interfaces

SafeFLASH은 임베디드 시스템을 위해 특별히 HCC-Embedded 사에서 설계한 안정적인 파일시스템입니다. HCC-Embedded 사는 윈도우 탐색기 아래 표준 드라이브처럼 작동하는 SafeFLASH를 호스트 시스템에 인터페이스하는 두가지 방법을 제공합니다.

USB Media Transfer Protocol (MTP)

MTP는 USB 대용량 저장 장치에 대한 대안입니다. HCC-Embedded 사는 SafeFLASH 드라이브가 MTP를 사용하여 호스트에 USB 연결을 할 수 있도록 MTP의 USB 디바이스 구현하였습니다. 가장 큰 차이점은 대용량 저장 장치가 직접 섹터 기반의 미디어를 액세스하는 반면에 MTP가 객체(Objects)를 액세스하는 것입니다.

이것은 실용적인 관점에서 임베디드 디바이스 개발자를 위한 몇 가지 장점이 있습니다 ​​:

  1. 호스트는 타겟(Target)상에서 다른 사용자로 파일시스템을 액세스합니다.
    따라서 모든 액세스가 동기화 되어 호스트가 연결됐을 때 로컬 드라이브를 분리할 필요가 없습니다.
  2. 모든 파일시스템을 타겟에서 사용할 수 있습니다.
    파일시스템의 로직과 신뢰성은 호스트에서 실행중인 시스템에 의해 결정되지 않고 오로지 타겟(Target)상에서만 결정됩니다.
USB Reliable File Interface
HCC-Embedded 는 MTP 및 대용량 저장장치에 대한 대안으로 USB 윈도우 드라이버를 제공하고, Windows XP 및 Windows Vista에 사용할 수 있습니다. 이 드라이버는 USB를 통해 Windows 탐색기에 원격 드라이브를 연결하기 위한 NFS와 같은 프로토콜을 구현합니다.
이것은 실용적인 관점에서 임베디드 디바이스 개발자를 위한 몇 가지 장점이 있습니다 ​​:
  1. 호스트는 타겟(Target)상에서 다른 사용자로 파일시스템을 액세스합니다.
    따라서 모든 액세스가 동기화 되어 호스트가 연결됐을 때 로컬 드라이브를 분리할 필요가 없습니다.
  2. 모든 파일시스템을 타겟(Target)에서 사용할 수 있습니다.
    파일시스템의 로직과 신뢰성은 호스트에서 실행중인 시스템에 의해 결정되지 않고 오로지 타겟(Target)상에서만 결정됩니다.
  3. 프로토콜은 소규모 임베디드 시스템을 염두에 두고 설계되었습니다.

Porting

SafeFLASH는 쉽게 포팅할수 있게 설계되었으며, 몇몇의 상용 RTOS에서 테스트 되었고, RTOS가 없는 Stand-alone 시스템 또한 테스트되었습니다. 우리는 모든 RTOS에 쉽게 포팅할 수 있습니다.
모든 코드는 ANSI 호환 ‘C’ 로 제공됩니다. 이것은 4개의 다른 개발환경에서 개발되었고 가장 높은 수준의 호환성을 보장하기 위해 문법검사기(Syntax Checker)를 통해서 실행됩니다.
시스템의 쉬운 평가를 위해서 샘플 어플리케이션 코드도 같이 제공됩니다. 또한, 다른 미디어 타입을 위한 샘플 드라이버와 하드웨어 의존성에 대한 레퍼런스를 제공합니다.
개발자 가이드에서는 포팅의 모든 측면에 대한 자세한 정보를 제공하고 특정 호스트 시스템에 대해서 수정해야 하는 부분을 명확하게 알려줍니다.

특히, 호스트 시스템에서 제공할 수 있는 것 :

  • 1. 시간/날짜 정보를 위한 실시간 클럭.
    시간/날짜 정보는 응용 프로그램의 파일과 함께 저장된다면 실시간 클럭이 필요합니다.
  • 2. 상호배제를 위한 세마포어(Semaphores for mutual exclusion).
    이것은 선점형 시스템(pre-emptive system)에서만 필요합니다.
  • 3. 다양한 디바이스를 위한 샘플 드라이버 파일제공.
    다른 설정을 하기 위한 수정방법에 관한 자세한 가이드라인이 제공됩니다.

Standard File API

How is it done?