Dobrica Pavlinušić's random unstructured stuff
CubieBoard: Revision 61
cubieboard_schematic_2012-08-08.pdf
BreadBoard V1.0 03-25 For CubieBoard.pdf A20
Running UBI/UBIFS on MLC NAND
NAND in mainline kernelSamsung K9GBG08U0A NAND
dpavlin@cubieboard:~$ dmesg | grep -A 5 nand [ 4.395437] nand: Could not find valid JEDEC parameter page; aborting [ 4.401898] nand: device found, Manufacturer ID: 0xec, Chip ID: 0xd7 [ 4.408272] nand: Samsung NAND 4GiB 3,3V 8-bit [ 4.412719] nand: 4096 MiB, MLC, erase size: 1024 KiB, page size: 8192, OOB size: 640 [ 4.421299] Bad block table found at page 524160, version 0x25 [ 4.427987] Bad block table found at page 524032, version 0x25 [ 4.434238] nand_read_bbt: bad block at 0x000001000000 [ 4.439379] nand_read_bbt: bad block at 0x000001100000 [ 4.445411] 6 ofpart partitions found on MTD device 1c03000.nand [ 4.451420] Creating 6 MTD partitions on "1c03000.nand": [ 4.456769] 0x000000a00000-0x0001ffa00000 : "rootfs" [ 4.461737] mtd: partition "rootfs" extends beyond the end of device "1c03000.nand" -- size truncated to 0xff600000 [ 4.472910] 0x000001000000-0x000001400000 : "env" [ 4.477926] 0x000000c00000-0x000001000000 : "U-Boot.backup" [ 4.483748] 0x000000800000-0x000000c00000 : "U-Boot" [ 4.488997] 0x000000400000-0x000000800000 : "SPL.backup" [ 4.494580] 0x000000000000-0x000000400000 : "SPL" dpavlin@cubieboard2:~$ dmesg | grep -A 5 nand [ 4.709427] nand: device found, Manufacturer ID: 0xad, Chip ID: 0xd7 [ 4.715876] nand: Hynix H27UBG8T2BTR-BC 32G 3.3V 8-bit [ 4.721021] nand: 4096 MiB, MLC, erase size: 2048 KiB, page size: 8192, OOB size: 640 [ 4.728997] Scanning device for bad blocks [ 8.484659] 6 ofpart partitions found on MTD device 1c03000.nand [ 8.490678] Creating 6 MTD partitions on "1c03000.nand": [ 8.496021] 0x000000a00000-0x0001ffa00000 : "rootfs" [ 8.500992] mtd: partition "rootfs" extends beyond the end of device "1c03000.nand" -- size truncated to 0xff600000 [ 8.515527] 0x000001000000-0x000001400000 : "env" [ 8.520564] 0x000000c00000-0x000001000000 : "U-Boot.backup" [ 8.526504] 0x000000800000-0x000000c00000 : "U-Boot" [ 8.531755] 0x000000400000-0x000000800000 : "SPL.backup" [ 8.537395] 0x000000000000-0x000000400000 : "SPL" many bad blockshttp://linux-sunxi.org/Mainline_NAND_Howto#Many_bad_blocks To fix many bad blocks issue you should:
1. Disable nand-on-flash-bbt in your dts Let's try to do this with armbian. cubieboardFirst, enable nand overlay dpavlin@cubieboard:~$ cat /boot/armbianEnv.txt overlays=nand Then remove nand-om-flash-btt: dpavlin@cubieboard:/$ cd /boot/dtb-`uname -r`/overlay dpavlin@cubieboard:/boot/dtb-4.14.23-sunxi/overlay$ # backup original root@cubieboard:/boot/dtb-4.14.23-sunxi/overlay# cp sun4i-a10-nand.dtbo sun4i-a10-nand.dtbo.orig # remote nand-on-flash-bbt root@cubieboard:/boot/dtb-4.14.23-sunxi/overlay# dtc -I dtb -O dts sun4i-a10-nand.dtbo | grep -v nand-on-flash-bbt > /tmp/nand.dts root@cubieboard:/boot/dtb-4.14.23-sunxi/overlay# dtc -I dts -O dtb /tmp/nand.dts > sun4i-a10-nand.dtbo Compile armbian kernel with this patch applied dpavlin@armbian:~/build$ cp ./patch/kernel/sunxi-dev/nand-disable-badblock-check-for-migration.patch.disabled \ ./userpatches/kernel/sunxi-next/nand-disable-badblock-check-for-migration.patch Reboot and check that nand is available: dpavlin@cubieboard:~$ dmesg | grep -A 8 MTD [ 13.696198] 6 ofpart partitions found on MTD device 1c03000.nand [ 13.702205] Creating 6 MTD partitions on "1c03000.nand": [ 13.707550] 0x000000a00000-0x0001ffa00000 : "rootfs" [ 13.712517] mtd: partition "rootfs" extends beyond the end of device "1c03000.nand" -- size truncated to 0xff600000 [ 13.723693] 0x000001000000-0x000001400000 : "env" [ 13.728713] 0x000000c00000-0x000001000000 : "U-Boot.backup" [ 13.734568] 0x000000800000-0x000000c00000 : "U-Boot" [ 13.739778] 0x000000400000-0x000000800000 : "SPL.backup" [ 13.745368] 0x000000000000-0x000000400000 : "SPL" [ 13.751476] sun4i-mdio 1c0b080.mdio: 1c0b080.mdio supply phy not found, using dummy regulator Now init nand: root@cubieboard:~# mtd_debug info /dev/mtd0 mtd.type = MTD_MLCNANDFLASH mtd.flags = MTD_CAP_NANDFLASH mtd.size = 4284481536 (3G) mtd.erasesize = 1048576 (1M) mtd.writesize = 8192 (8K) mtd.oobsize = 640 regions = 0 root@cubieboard2:~# mtd_debug info /dev/mtd0 mtd.type = MTD_MLCNANDFLASH mtd.flags = MTD_CAP_NANDFLASH mtd.size = 4284481536 (3G) mtd.erasesize = 2097152 (2M) mtd.writesize = 8192 (8K) mtd.oobsize = 640 regions = 0 root@cubieboard:/home/dpavlin# flash_erase /dev/mtd0 0 0 Erasing 1024 Kibyte @ 600000 -- 0 % complete libmtd: error!: MEMERASE64 ioctl failed for eraseblock 6 (mtd0) error 5 (Input/output error) flash_erase: error!: /dev/mtd0: MTD Erase failure error 5 (Input/output error) Erasing 1024 Kibyte @ 700000 -- 0 % complete libmtd: error!: MEMERASE64 ioctl failed for eraseblock 7 (mtd0) error 5 (Input/output error) flash_erase: error!: /dev/mtd0: MTD Erase failure error 5 (Input/output error) Erasing 1024 Kibyte @ ff500000 -- 100 % complete root@cubieboard:/home/dpavlin# ubiformat /dev/mtd0 ubiformat: mtd0 (mlc-nand), size 4284481536 bytes (4.0 GiB), 4086 eraseblocks of 1048576 bytes (1024.0 KiB), min. I/O size 8192 bytes libscan: scanning eraseblock 4085 -- 100 % complete ubiformat: 4084 eraseblocks are supposedly empty ubiformat: warning!: 2 of 4086 eraseblocks contain non-UBI data ubiformat: continue? (y/N) y ubiformat: warning!: only 0 of 4086 eraseblocks have valid erase counter ubiformat: erase counter 0 will be used for all eraseblocks ubiformat: note, arbitrary erase counter value may be specified using -e option ubiformat: continue? (y/N) y ubiformat: use erase counter 0 for all eraseblocks ubiformat: formatting eraseblock 6 -- 0 % complete libmtd: error!: MEMERASE64 ioctl failed for eraseblock 6 (mtd0) error 5 (Input/output error) ubiformat: error!: failed to erase eraseblock 6 error 5 (Input/output error) ubiformat: mark it as bad? (y/N) y ubiformat: marking block 6 bad ubiformat: formatting eraseblock 7 -- 0 % complete libmtd: error!: MEMERASE64 ioctl failed for eraseblock 7 (mtd0) error 5 (Input/output error) ubiformat: error!: failed to erase eraseblock 7 error 5 (Input/output error) ubiformat: mark it as bad? (y/N) y ubiformat: marking block 7 bad ubiformat: formatting eraseblock 4085 -- 100 % complete ubiattach -p /dev/mtd0 ubimkvol /dev/ubi0 -s 2GiB -N root mount /dev/ubi0_0 /mnt/ -t ubifs root@cubieboard:~# mount /dev/ubi0_0 /mnt/ -t ubifs [Wed Feb 28 17:49:38 2018] UBIFS error (pid: 4709): cannot open "/dev/ubi0:root", error -22 [Wed Feb 28 17:49:43 2018] UBIFS (ubi0:0): background thread "ubifs_bgt0_0" started, PID 4722 [Wed Feb 28 17:49:44 2018] UBIFS (ubi0:0): UBIFS: mounted UBI device 0, volume 0, name "root" [Wed Feb 28 17:49:44 2018] UBIFS (ubi0:0): LEB size: 1032192 bytes (1008 KiB), min./max. I/O unit sizes: 8192 bytes/8192 bytes [Wed Feb 28 17:49:44 2018] UBIFS (ubi0:0): FS size: 2137669632 bytes (2038 MiB, 2071 LEBs), journal size 33030144 bytes (31 MiB, 32 LEBs) [Wed Feb 28 17:49:44 2018] UBIFS (ubi0:0): reserved for root: 4952683 bytes (4836 KiB) [Wed Feb 28 17:49:44 2018] UBIFS (ubi0:0): media format: w5/r0 (latest is w5/r0), UUID 8E9A30F0-241F-4013-916F-C0B995F22BB1, small LPT model cubieboard2This is mostly redundant from cubieboard, but with attempt to define mtd partitions correctly root@cubieboard2:/home/dpavlin# ubiformat /dev/mtd0 ubiformat: mtd0 (mlc-nand), size 4273995776 bytes (4.0 GiB), 2038 eraseblocks of 2097152 bytes (2.0 MiB), min. I/O size 8192 bytes libscan: scanning eraseblock 2037 -- 100 % complete ubiformat: 2038 eraseblocks have valid erase counter, mean value is 1 ubiformat: formatting eraseblock 2037 -- 100 % complete mount ubifs filesystemdpavlin@cubieboard:~$ grep ubi /mnt/boot/armbianEnv.txt rootdev=ubi0:root ubi.mtd=0 rootfstype=ubifs dpavlin@cubieboard:~$ grep ubi /etc/fstab ubi0:root / ubifs defaults,noatime,nodiratime 0 1 u-bootOriginal u-boot output HELLO! BOOT0 is starting! boot0 version : 1.5.1 dram size =1024 Succeed in opening nand flash. Succeed in reading Boot1 file head. The size of Boot1 is 0x0003c000. The file stored in 0X00000000 of block 2 is perfect. Check is correct. Ready to disable icache. Succeed in loading Boot1. Jump to Boot1. [ 0.133] boot1 version : 1.4.0 [ 0.133] pmu type = 3 [ 0.134] bat vol = 0 [ 0.161] axi:ahb:apb=3:2:2 [ 0.161] set dcdc2=1400, clock=1008 successed [ 0.163] key [ 0.175] no key found [ 0.175] flash init start [ 4.051] flash init finish [ 4.052] fs init ok [ 4.053] fattype FAT16 [ 4.053] fs mount ok [ 4.060] script finish [ 4.061] power finish [ 4.069] BootMain start [ 4.069] 13 [ 4.089] key value = 0 [ 4.089] recovery key high 6, low 4 [ 4.090] unable to find fastboot_key key_max value [ 4.098] test for multi os boot with display [ 4.100] show pic finish [ 4.103] load kernel start [ 4.127] load kernel successed [ 4.127] start address = 0x4a00000 U-Boot 2011.09-rc1 (Nov 26 2012 - 14:01:52) Allwinner Technology CPU: SUNXI Family Board: A10-EVB DRAM: 512 MiB NAND: 3776 MiB In: serial Out: serial Err: serial --------fastboot partitions-------- -total partitions:11- -name- -start- -size- bootloader : 1000000 1000000 env : 2000000 1000000 boot : 3000000 2000000 system : 5000000 14000000 data : 19000000 20000000 misc : 39000000 1000000 recovery : 3a000000 2000000 cache : 3c000000 8000000 private : 44000000 1000000 sysrecovery : 45000000 14000000 UDISK : 59000000 93000000 ----------------------------------- Hit any key to stop autoboot: 0 sunxi# compile with nand supportOn Cubieboard2 with those patches we get: => nand info Device 0: nand0, sector size 2048 KiB Page size 8192 b OOB size 640 b Erase size 2097152 b subpagesize 8192 b options 0x00001000 bbt options 0x00070000 # which comparted to booted linux kernel with mtd support.... root@cubieboard2:~# mtd_debug info /dev/mtd0 mtd.type = MTD_MLCNANDFLASH mtd.flags = MTD_CAP_NANDFLASH mtd.size = 4284481536 (3G) mtd.erasesize = 2097152 (2M) mtd.writesize = 8192 (8K) mtd.oobsize = 640 regions = 0 # it looks somewhat OK, but mtdparts doesn't (yet) return anything. Another day, another try to get mtdparts to display something... root@armbian:~/build/cache/sources/u-boot/v2017.11# grep -i mtd .config CONFIG_SPL_MTD_SUPPORT=y CONFIG_CMD_MTDPARTS=y CONFIG_MTDIDS_DEFAULT="nand0=sunxi-nand" CONFIG_MTDPARTS_DEFAULT="mtdparts=sunxi-nand:4m(spl),4m(spl-backup),4m(uboot),4m(uboot-backup),4m(env),-(UBI)" # CONFIG_CMD_MTDPARTS_SPREAD is not set # MTD Support CONFIG_MTD=y # CONFIG_MTD_NOR_FLASH is not set CONFIG_MTD_UBI=y CONFIG_MTD_UBI_WL_THRESHOLD=4096 CONFIG_MTD_UBI_BEB_LIMIT=20 # CONFIG_MTD_UBI_FASTMAP is not set => mtdparts device nand0 <sunxi-nand>, # parts = 6 #: name size offset mask_flags 0: spl 0x00400000 0x00000000 0 1: spl-backup 0x00400000 0x00400000 0 2: uboot 0x00400000 0x00800000 0 3: uboot-backup 0x00400000 0x00c00000 0 4: env 0x00400000 0x01000000 0 5: UBI 0xfec00000 0x01400000 0 active partition: nand0,0 - (spl) 0x00400000 @ 0x00000000 defaults: mtdids : nand0=sunxi-nand mtdparts: mtdparts=sunxi-nand:4m(spl),4m(spl-backup),4m(uboot),4m(uboot-backup),4m(env),-(UBI) Instructions after this are hit-or-miss... dpavlin@klin:/klin/u-boot$ cp configs/Cubieboard_defconfig .config # add NAND, MTD options, A10 for cubieboard1 # compile while defining flash: dpavlin@klin:/klin/u-boot$ cat build-cubieboard.sh # parametars are probably wrong for your chip! make V=1 CONFIG_NAND_SUNXI_SPL_ECC_STRENGTH=40 CONFIG_SYS_NAND_PAGE_SIZE=4036 CONFIG_SYS_NAND_OOBSIZE=640 CONFIG_SYS_NAND_BLOCK_SIZE=0x100000 dpavlin@cubieboard:~$ scp 10.60.0.92:/klin/u-boot/u-boot*spl* . dpavlin@cubieboard:~$ sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8 488+1 records in 488+1 records out 500154 bytes (500 kB) copied, 0.0423498 s, 11.8 MB/s It would be better to define params in u-boot config file like: CONFIG_SYS_EXTRA_OPTIONS="SYS_NAND_BLOCK_SIZE=0x40000,SYS_NAND_PAGE_SIZE=4096,SYS_NAND_OOBSIZE=256" (with correct values of course). pinoutU14 (Next to SATA connector)
U15 (Between Ethernet port and USB ports)
everything below line is for legacy kernel and quite old disk speedNANDroot@cubieboard2:/home/dpavlin# uname -a Linux cubieboard2 3.4.109-sun7i #4 SMP PREEMPT Sun Oct 11 14:32:15 CEST 2015 armv7l GNU/Linux root@cubieboard2:/home/dpavlin# hdparm -t /dev/nand /dev/nand: Timing buffered disk reads: 32 MB in 3.22 seconds = 9.94 MB/sec # this is different, faster sdcard root@cubieboard2:~# uname -a Linux cubieboard2 4.3.3-sunxi #3 SMP Mon Dec 28 11:27:16 CET 2015 armv7l GNU/Linux root@cubieboard2:~# hdparm -tT /dev/mmcblk0 /dev/mmcblk0: Timing cached reads: 770 MB in 2.00 seconds = 384.59 MB/sec Timing buffered disk reads: 60 MB in 3.05 seconds = 19.67 MB/sec SATAPowered by 2A Nexus 7 power supply (for SATA) root@debian:~/sunxi-tools# ./bin2fex /boot/script.bin script.fex fexc-bin: /boot/script.bin: version: 0.1.2 fexc-bin: /boot/script.bin: size: 42144 (76 sections) root@debian:~/sunxi-tools# cp script.fex script+sata.fex root@debian:~/sunxi-tools# diff -urw script.fex script+sata.fex --- script.fex 2013-05-30 10:41:13.979510762 +0000 +++ script+sata.fex 2013-05-30 10:42:36.380244101 +0000 @@ -595,7 +595,7 @@ [sata_para] sata_used = 1 -sata_power_en = +sata_power_en = port:PB08<1><default><default><0> [mmc0_para] sdc_used = 1 root@debian:~/sunxi-tools# ./fex2bin script+sata.fex /boot/script.bin root@debian:/etc# git diff diff --git a/modules b/modules index d8894c3..9e65a80 100644 --- a/modules +++ b/modules @@ -4,3 +4,4 @@ # at boot time, one per line. Lines beginning with "#" are ignored. # Parameters can be specified after the module name. +sw_ahci_platform Reboot to activate changes and test speed (using 80G intel SSD to have sense of maximum performance) root@debian:~# hdparm -i /dev/sda /dev/sda: Model=INTEL SSDSA2M080G2GC, FwRev=2CV102HD, SerialNo=CVPO035101VN080JGN Config={ Fixed } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0 BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=1 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=156301488 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 AdvancedPM=no WriteCache=enabled Drive conforms to: ATA/ATAPI-7 T13 1532D revision 1: ATA/ATAPI-2,3,4,5,6,7 * signifies the current active mode root@debian:~# hdparm -tT /dev/sda /dev/sda: Timing cached reads: 784 MB in 2.00 seconds = 392.08 MB/sec Timing buffered disk reads: 460 MB in 3.00 seconds = 153.32 MB/sec And test with disk: root@debian:~# hdparm -i /dev/sda /dev/sda: Model=ST96812AS, FwRev=7.24, SerialNo=3PJ1GCKE Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4 BuffType=unknown, BuffSize=8192kB, MaxMultSect=16, MultSect=off CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=117231408 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 AdvancedPM=yes: unknown setting WriteCache=enabled Drive conforms to: Unspecified: ATA/ATAPI-1,2,3,4,5,6,7 * signifies the current active mode root@debian:~# hdparm -tT /dev/sda /dev/sda: Timing cached reads: 746 MB in 2.00 seconds = 372.90 MB/sec Timing buffered disk reads: 120 MB in 3.03 seconds = 39.56 MB/sec GPIOCameraOV7670 is supported http://linux-sunxi.org/CSI
hardwarepinout: https://www.olimex.com/wiki/How_to_add_pwm cat /sys/class/pwm-sunxi/pwm0/pin PB2 echo 10khz > /sys/class/pwm-sunxi/pwm0/period echo 25 > /sys/class/pwm-sunxi/pwm0/duty_percent echo 1 > /sys/class/pwm-sunxi/pwm0/run LEDsdpavlin@cubieboard2:~$ grep . /sys/class/leds/*/trigger /sys/class/leds/blue:ph21:led2/trigger:none battery-charging-or-full battery-charging battery-full battery-charging-blink-full-solid ac-online usb-online mmc0 timer [heartbeat] backlight cpu0 cpu1 default-on /sys/class/leds/green:ph20:led1/trigger:[none] battery-charging-or-full battery-charging battery-full battery-charging-blink-full-solid ac-online usb-online mmc0 timer heartbeat backlight cpu0 cpu1 default-on forum
ina219device treedpavlin@cubieboard2:~$ sensors ina219-i2c-1-40 Adapter: mv64xxx_i2c adapter in0: +0.04 V in1: +4.64 V power1: 66.88 W curr1: +13.64 A iio_hwmon-isa-0000 Adapter: ISA adapter temp1: +33.6�C root@cubieboard2:~# dmesg | grep ina | tail -1 [ 6597.685287] ina2xx 1-0040: power monitor ina219 (Rshunt = 100 uOhm) # hum, it should be 10uA, so I changed that in device tree dpavlin@cubieboard2:~$ dmesg | grep ina219 [ 11.594536] ina2xx 1-0040: power monitor ina219 (Rshunt = 10 uOhm) dpavlin@cubieboard2:~$ sensors ina219-i2c-1-40 Adapter: mv64xxx_i2c adapter in0: +0.02 V in1: +4.75 V power1: 85.00 W curr1: +17.97 A iio_hwmon-isa-0000 Adapter: ISA adapter temp1: +32.5�C # still wrong current! user-land CUser-land implementation which works: https://github.com/ZigFisher/Glutinium/blob/master/i2c-telemetry/src/ina219.c modified a little to provide full timestamp and fflush: ina219.c dpavlin@cubieboard2:~$ ./ina219 -b 1 -i 1 2017-10-23T12:40:24 4744mV 262.2mA 2017-10-23T12:40:26 4756mV 249.1mA 2017-10-23T12:40:27 4776mV 223.0mA 2017-10-23T12:40:28 4772mV 223.8mA 2017-10-23T12:40:29 4760mV 224.0mA 2017-10-23T12:40:30 4768mV 223.0mA 2017-10-23T12:40:31 4772mV 223.1mA 2017-10-23T12:40:32 4748mV 224.6mA 2017-10-23T12:40:33 4776mV 223.1mA 2017-10-23T12:40:34 4768mV 223.5mA SPI flash add-ondpavlin@cubieboard:~$ sudo flashrom -p linux_spi:dev=/dev/spidev0.0 flashrom v0.9.9-2-g51e4303 on Linux 4.14.47-sunxi (armv7l) flashrom is free software, get the source code at https://flashrom.org Calibrating delay loop... OK. Found GigaDevice flash chip "GD25Q80(B)" (1024 kB, SPI) on linux_spi. No operations were specified. root@cubieboard:/home/dpavlin# time flashrom -p linux_spi:dev=/dev/spidev0.0 -r /dev/null flashrom v0.9.9-2-g51e4303 on Linux 4.14.47-sunxi (armv7l) flashrom is free software, get the source code at https://flashrom.org Calibrating delay loop... OK. Found GigaDevice flash chip "GD25Q80(B)" (1024 kB, SPI) on linux_spi. Reading flash... done. real 0m11.210s user 0m0.796s sys 0m0.381s |