JESFS -JO의 임베디드 직렬 파일 시스템
표준 (직렬) Nor-Flash의 경우
언어 데이터와 같은 매우 간단한 것들을 생각해보십시오 : "매우 작은"임베디드 장치 (임베디드 리눅스와 같은 "큰"것이 아니라 수년간 작은 배터리로 실행할 수있는 것) : 일반적으로 "코드 어딘가"로 통합됩니다.
변화하기 어렵다! 그러나 언어 데이터가 파일에 있으면 변경이 쉽습니다. 그래픽, 설정, 모든 것도 마찬가지입니다… 여러 다른 소스에서 임베디드 장치의 펌웨어를 변경할 수도 있습니다!
임베디드 장치를 생각해보십시오. 최신 펌웨어를 스스로 얻을 수 있습니다! 예 : Wi-Fi, 모바일 인터넷, Bluetooth, UART, Radio-Link,…
갑자기 모든 옵션이 열려 있습니다! 그리고 보안에 대한 우려가 있다면 : 걱정하지 마십시오 : 나중에 볼 수 있듯이 이미 해결 된 문제 ..
“매우 작은 장치”의 주요 문제는 지금까지“파일 시스템”이었습니다. 모두가“Fat”,“NTF”를 알고 있지만 작은 칩의 파일 시스템을 생각한 적이 있습니까? 아니면 CPU 내부에도? 올바른 소프트웨어로 문제가 없습니다. 이것이 제가 쓴 이유입니다
“JESFS - Jo의 내장 된 직렬 파일 시스템”

[이미지 : 2x3 mm의 4MB JESFS]
나의 일상적인 일은 IoT입니다. 나는 정말로 실용적인 솔루션을 찾지 못했기 때문에 내 자신의 솔루션을 만들기로 결정했습니다. "견고성", "보안"및 "작은 발자국"은 나의 디자인 제약 조건이었습니다.
JESFS는“실제 세계”에서 사용하도록 설계되었으며 NRF52840-DK, NRF52832 및 CC13XX/CC26XX 런치 패드에서 사용되는 M25R 시리즈와 같은 표준 연속 NOR- 플래시 메모리를 사용하도록 설계되었습니다.
JESFS에 대한 몇 가지 기본 사항 :
- 초소형 RAM 및 코드 풋 프린트 : 8KBITE 프로그램 메모리 이하의 가장 작은 MCU에서 사용할 수 있습니다 (유명한 MSP430 시리즈, 거의 모든 종류의 32 비트 암 코어 (M0, M3, M4,…)). 200 바이트의 RAM 만 충분합니다!
- 완전히 오픈 소스, 무료 및 표준 C로 작성되었습니다.
- 8kbyte에서 16Mbyte (최대 2GBYTE)까지 의 Serial NOR-Flash와 함께 작동하지만 CPU 내부 NOR-FLASH와 함께 사용할 수도 있습니다.
- 초소형 Jesfsboot Secure Bootloader와 함께 작동합니다 (표준 암 코어에는 8KB 미만이 필요합니다 (“OTA”).
- 최적화 된 마모 레벨링 (메모리의 최대 수명)을 포함합니다.
- 매우 빠른 데이터 전송 (예 : 읽기 파일 : NRF52840의 3.7MB/SEC ).
- 특히 데이터 수집, 이벤트 보고서 및 저널링 내역에 대한 수백만 건의 쓰기주기를 허용하기 위해 특수 모드가 추가되었습니다.
- JESFS는 지속적입니다 : 전력 손실 또는 재설정에 대한 데이터 손실이 없습니다.
- (거의) 모든 상황을 위해 설계되었으며, 여기서 기억이 사용될 수있는 모든 상황 (블록 만 삭제할 수있는 것 (0-> 1)과 0 만 기록했습니다.
- 테스트 : Macronix MX25RXX, Gigadevices GD25WDXX 및 GD25WQXX, ...
- 매우 낮은 전력 임베디드 시스템에 엄격하게 테일링됩니다
- 기본 RTO의 장점을 사용하도록 설계되었지만 독립형을 사용할 수도 있습니다.
- NRF52840/NRF52832-DK, 런치 패드 CC13XX/26XX, ATMEL SAMD20, Windows-PC 및 기타 (문서 PDF : JESFS.PDF)에 대한 샘플 응용 프로그램
- 직관적 인 API와 함께 사용하기 쉽습니다.
int16_t fs_open(FS_DESC *pdesc, char* pname, uint8_t flags);
int32_t fs_read(FS_DESC *pdesc, uint8_t *pdest, uint32_t anz);
int16_t fs_write(FS_DESC *pdesc, uint8_t *pdata, uint32_t len);
int16_t fs_close(FS_DESC *pdesc);
int16_t fs_delete(FS_DESC *pdesc);
int16_t fs_rewind(FS_DESC *pdesc);
int16_t fs_rename(FS_DESC *pd_odesc, FS_DESC *pd_ndesc);
uint32_t fs_get_crc32(FS_DESC *pdesc);
int16_t fs_check_disk(void cb_printf(char *fmt, ...), uint8_t *pline, uint32_t line_size);
int16_t fs_format(uint32_t f_id);
int16_t fs_start(uint8_t mode);
void fs_deepsleep(void);
int16_t fs_info(FS_STAT *pstat, uint16_t fno);
void fs_sec1970_to_date(uint32_t asecs, FS_DATE *pd);
changelog (jesfs_main.c)
- V1.0 CC13XX/CC26XX 및 Windows
- V1.5 (NRF52) NRF52840 포트
- v1.51 (NRF52) NRF52840 지원 깊은 수면/웨이크 업 (RTC 활성 및 전체 RAM 보유 기능 <3UA)
- v1.6 추가 'fs_disk_check ()': 신중한 디스크 점검
- v1.61 (NRF52) 소스 화장품 및 기본 스im 시계를 NRF52840에서 16MHz로 줄였습니다 (SoftDevice 없이만 32MHz 권장)
- v1.7 (NRF52)은 U- 블록 NINA-B3에 대한 첨가 된 정의입니다
- v1.8 추가 시간 설정 '!' 및 UART-RX-ORROR
- v2.0 (NRF52) TB_TOOLS의 다중 사용을 위해 UART 드라이버를 APP_UART로 변경했습니다.
- v2.01 (NRF52) SDK17로 변경되었습니다 (SDK17의 NRF_CLOCK () 문제, DOCU 참조)
- v2.02 (NRF52)는 SDK17.0.2 및 SES 5.10B (SDK17.0.2의 NRF_CLOCK () 문제 문제 SDK17.0.2에서 고정되지 않은 SDK17.0.2의 SES 5.10B로 변경되었습니다. DOCU 참조)
- v2.10 (NRF52)은 NRF52832에 대한 지원을 추가했습니다
- v2.20 (NRF52) NRF52832에 대한 샘플 추가 (U- 블록 Anna-B112- 모듈에 대한 I/O 구성)
- v2.30 (NRF52) JESFS_MAIN.C에서 분석을 위해 플래시 ID 인쇄 추가
- v2.54 (nrf52)는 tb_tools.c에 'tb_get_runtime ()'를 추가했습니다
- v2.55 (NRF52)는 SDK17.1.0 및 SES 5.42AB (SDK17.0.2의 NRF_CLOCK () 문제 SDK17.0.2에서 고정되지 않은 SDK17.0.2에서 SES 5.42AB로 변경되었습니다.
- v2.60 (NRF52) 글로벌 매크로 $ sdk_root를 사용하십시오
- v2.61 (Samd20) Atmel Samd20 기여 ( Kudos !)
- v2.70 추가 _feature supply_voltage_check ();
- v2.71 모든 글로벌 FS_-FUNTION은 입력시 _SUPPLY_VOLTAGE_CHECK ()를 확인합니다
- v2.72 JESFS_HL.C (파일 v1.91)
JESFS 사용-Blackbox-Demo
가정용 비행 레코더
많은 기술 장치는 몇 년 동안 신뢰할 수 있으며 아무도 신뢰할 수 없습니다. 그러나 그들이 실패한다면, 항상 질문이 있습니다 : 무엇이 잘못 되었습니까?
이것은 JESFS가 매우 유용해질 수있는 곳입니다.
더 읽기 : blackbox_eval.pdf
하드웨어
일부 테스트 된 직렬 플래시 칩
넓은 전압 범위 (1.6V-3.6V) 및 초력 대기 :
- macronix MX25R 시리즈 (MX25RXX)
- Gigadevices GD25W- 시리즈 (GD25WD80C, GD25WQ64E, ...)
NRF52-CPUS와 함께 사용하십시오.


CC13XX/26XX-CPUS와 함께 사용하십시오.

설치 (NRF52 CPU의 경우) :
SES (v6.22a ( )) 및 SDK 17.1.0 ( : 이후 버전의 SES가 변경된 프로젝트 설정이 필요합니다 !!!)로 제작되었습니다.
ses-> 도구 -> 옵션 -> 빌딩에서 sdk를 찾을 수있는 macro $ sdk_root를 설정하십시오.
I/O 핀으로 플랫폼 매크로 설정 (TB_TOOLS.H 참조)
선택적으로 NRF_CLOCK ()에서 문제를 해결하십시오 (docu tb_tools_nrf52.c/.h 참조)