🛠 Mesurer le stockage du BPI-CM4 : eMMC, microSD et le palier NVMe
Objectifs
Le BPI-CM4 offre trois chemins de stockage très différents : l'eMMC 16 GB du module (bus 8 bits, mmc-hs200, 200 MHz), la microSD du carrier (4 bits, 50 MHz) et le PCIe Gen2 x1 acheminé jusqu'au port mini-PCIe du carrier. Vous allez mesurer chaque chemin avec fio et hdparm et comparer aux références publiées : eMMC ≈ 233 MB/s en lecture séquentielle 1 M (fio) ou 148,8 MB/s (hdparm), SSD NVMe (Samsung 970 EVO Plus via adaptateur mini-PCIe) ≈ 351 MB/s et 101 k IOPS en 4 k aléatoire — environ 100× la microSD en accès 4 k.
Matériel
- BPI-CM4 + carrier BPI-CM4IO sous Armbian
- microSD de test (classe 10 minimum)
- Optionnel : SSD NVMe M-key standard monté sur un adaptateur mini-PCIe (le carrier n'a PAS de connecteur M.2)
- Alimentation stable 5 V / 3 A
Code complet
sudo apt update && sudo apt install -y fio hdparm
# Lecture séquentielle 1 M sur le rootfs (adapter le périphérique)
sudo fio --name=seqread --rw=read --bs=1M --size=256M --runtime=30 \
--iodepth=32 --ioengine=libaio --direct=1 --filename=/root/testfile
sudo rm -f /root/testfile
# Repère hdparm (comparable aux chiffres du wiki vendor)
sudo hdparm -Tt /dev/mmcblk0 # eMMC du module
sudo hdparm -Tt /dev/mmcblk1 # microSD du carrier
# Score de stockage standardisé (procédure du wiki Banana Pi)
curl -fsSL https://raw.githubusercontent.com/TheRemote/PiBenchmarks/master/Storage.sh | sudo bash
Vérification attendue
Lecture séquentielle eMMC de l'ordre de 150 à 230 MB/s selon le lot (les puces eMMC sont secondusées : Samsung HS200 ou Rayson, les chiffres varient d'une carte à l'autre) ; microSD nettement derrière, surtout en 4 k aléatoire ; si un SSD NVMe est monté, le score PiBenchmarks bondit (le wiki cite 24550 contre 5446 en eMMC).
Erreurs fréquentes
- Benchmarker le mauvais périphérique : vérifier avec lsblk quel mmcblk0/mmcblk1 est l'eMMC et lequel est la SD.
- Conclure à une panne parce que vos chiffres diffèrent du wiki : le composant eMMC dépend du lot de fabrication.
- SD pleine ou quasi pleine : les débits s'effondrent, tester sur une carte peu remplie.
- Combiner SD UHS + port mini-PCIe occupé et subir des plantages : le vendor documente pci=pcie_bus_safe disableuhs dans /boot/env.txt (voir le tuto NVMe).
- Écrire le fichier de test sur /root monté en lecture seule ou saturé : fio échoue sans message clair.
Autres tutoriels pour cette carte
- Monter le module BPI-CM4 sur son carrier et réussir le premier boot
- Apprivoiser les LED et la touche ADC du carrier CM4IO
- Activer I2C, SPI et UART sur le BPI-CM4 : env.txt ou armbianEnv.txt
- Brancher un capteur BME280 sur l'I2C1 du carrier (GPIOX_17/18)
- Déplacer le rootfs sur un SSD NVMe via le port mini-PCIe
- Exploiter le NPU 5 TOPS de l'A311D pour l'inférence embarquée
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash