Jesfs - Sistema de arquivos serial incorporado de Jo
para nor-flash padrão (serial)
Pense em coisas muito simples, como dados de linguagem: em um dispositivo incorporado "muito pequeno" (não algo "grande" como um Linux incorporado, mas algo que pode funcionar com pequenas baterias por anos): é comumente integrado "em algum lugar do código".
Difícil de mudar! Mas se os dados do idioma estiverem nos arquivos, as alterações serão fáceis. O mesmo para gráficos, configurações, tudo ... até permite alterar o firmware no dispositivo incorporado de muitas fontes diferentes!
Pense em dispositivos incorporados, isso pode obter seu firmware mais recente por si mesmo! Por exemplo, sobre wifi, internet móvel, bluetooth, uart, link de rádio,…
De repente, todas as opções estão abertas! E se você tiver preocupações com a segurança: não se preocupe: o problema já resolvido, como você verá mais tarde ..
O principal problema para "dispositivos muito pequenos" - até agora - foi o "sistema de arquivos": todo mundo sabe "gordo", "NTFS", ... mas você já pensou em um sistema de arquivos em um pequeno chip? Ou mesmo dentro de uma CPU? Não há problema, com o software certo. É por isso que escrevi
“Jesfs - sistema de arquivos serial incorporado de Jo“

[Imagem: 4MB Jesfs em 2x3 mm]
Meu trabalho diário é a IoT. Como não encontrei nenhuma solução realmente prática, decidi criar a minha. “Robustez”, “Segurança” e “Pequena Pegada” foram minhas restrições de design.
Os Jesfs foram projetados para uso no “mundo real” e para uso com memórias nor-flash em série padrão, como a série M25R, usadas em NRF52840-DK, NRF52832 e CC13XX/CC26XX LaunchPads, disponível até 16 MB, ou ainda mais…
Alguns conceitos básicos sobre Jesfs:
- A pegada de aríete e código ultra-pequena: pode ser usada no menor MCUS com apenas 8kbyte programa de memória ou menos (como a famosa-série MSP430, quase todo tipo de núcleos de braço de 32 bits (M0, M3, M4,….)). Apenas 200 bytes de RAM são suficientes!
- Completamente de código aberto, gratuito e escrito no padrão C.
- Trabalha com Nor-Flash em série de 8kbyte a 16Mbyte (opt. Até 2Gbyte), mas também pode ser usado com Nor-Flash Internal CPU.
- Trabalha de mãos dadas com o Ultra-Small JesfsBoot Secure Bootloader (requer menos de 8kb nos núcleos padrão do braço, incluindo um mecanismo de criptografia AES-128 para atualizações ex-ar confiáveis ("OTA")).
- Inclui nivelamento otimizado de desgaste (para a vida máxima da memória).
- Transferência de dados muito rápida (por exemplo, arquivos de leitura: 3,7MB/s no NRF52840).
- Um modo especial foi adicionado para permitir milhões de ciclos de gravação, especialmente para coleta de dados, relatórios de eventos e aplicações de diário.
- Os JESFs são persistentes: sem perda de dados sobre perda de energia ou redefinição.
- Projetado para (quase) todas as situações, onde nem as memórias poderiam ser usadas (aquelas onde apenas os blocos podem ser excluídos (0-> 1) e apenas 0 escritos.
- Testado com: Macronix mx25rxx, Gigadevices gd25wdxx e gd25wqxx, ...
- Estritamente atrelado a sistemas incorporados ultra-baixa-potência
- Projetado para usar a vantagem de um RTOS subjacente, mas também pode ser usado independente.
- Exemplo de aplicativos para o NRF52840/NRF52832-DK, LankPads CC13XX/26XX, Atmel SAMD20, Windows-PC e outros (Documentação PDF: Jesfs.pdf)
- Fácil de usar com uma API intuitiva:
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 e windows
- V1.5 (nrf52) porta nrf52840
- V1.51 (nrf52) nrf52840 suporta sono profundo/wakeup (sono profundo com retenção de ram ativa e completa do RTC <3ua)
- V1.6 Adicionado 'fs_disk_check ()': verificação cuidadosa do disco
- V1.61 (NRF52) Cosméticos de origem e Relógio SPIM padrão reduzido para 16MHz em NRF52840 (32MHz recomendou apenas sem softddevice)
- V1.7 (nrf52) adicionado define para u-blox nina-b3
- V1.8 Adicionado tempo definido com '!' e Uart-rx-error
- V2.0 (nrf52) alterou o driver UART para app_uart para múltiplos usuários em tb_tools
- V2.01 (nrf52) alterado para sdk17 (problema com nrf_clock () em sdk17, ver docu)
- V2.02 (nrf52) alterado para sdk17.0.2 e SES 5.10b (Problema com nrf_clock () em sdk17.0.2 não corrigido em sdk17.0.2, ver docu)
- V2.10 (NRF52) Adicionado suporte para NRF52832
- V2.20 (NRF52) Amostra adicionada para NRF52832 (configuração de E/S para U-Blox Anna-B112-Module)
- V2.30 (NRF52) Impressão adicionada do ID do flash para análise em jesfs_main.c
- V2.54 (nrf52) adicionou 'tb_get_runtime ()' em tb_tools.c
- V2.55 (nrf52) alterado para SDK17.1.0 e SES 5.42AB (Problema com nrf_clock () em sdk17.0.2 não corrigido em sdk17.0.2, ver docu)
- V2.60 (nrf52) use macro global $ sdk_root
- V2.61 (SAMD20) ATMEL SAMD20 Contribuiu ( Parabéns !)
- V2.70 adicionado _feature Supply_voltage_check ();
- V2.71 Todas
- V2.72 jesfs_hl.c (arquivo v1.91)
Usando Jesfs-Blackbox-Demo
Um gravador de vôo para uso doméstico
Muitos dispositivos técnicos funcionam confiáveis por anos e anos e ninguém se importa com eles. Mas se eles falharem, sempre há a pergunta: o que deu errado?
É aqui que os Jesfs podem se tornar extremamente úteis.
Leia mais: BlackBox_Eval.pdf
Hardware
Alguns testados flash serial-flash
Ampla faixa de tensão (1,6V-3.6V) e espera de espera ultra-baixa:
- Macronix MX25R-Série (MX25RXX)
- Gigadevices GD25W-Série (GD25WD80C, GD25WQ64E, ...)
Use com NRF52-CPUS:


Use com cc13xx/26xx-cpus:

Instalação (para CPUs NRF52):
Construído com SES (v6.22a ( )) e SDK 17.1.0 ( : versões posteriores do SES requer configurações de projeto alteradas !!!)
Defina macro $ sdk_root onde encontrar o SDK no SES -> Ferramentas -> Opções -> Construção: por exemplo: "Macros globais": "sdk_root = c: nordic nrf5_sdk_17.1.0_ddde560"
Defina a macro da plataforma com pinos de E/O (consulte TB_tools.h)
Opcionalmente, corrija o problema com nrf_clock () (consulte docu tb_tools_nrf52.c/.h)