NuMaker SPI flash-backed file system

Committer:
cyliang
Date:
Wed Mar 01 04:00:38 2023 +0000
Revision:
11:82c5a2fca797
Parent:
1:772d0adf75cc
Update to os v6.17.0 for M467 target

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ccli8 1:772d0adf75cc 1 # Example for SPI flash-backed Mbed OS file system
ccli8 1:772d0adf75cc 2
ccli8 1:772d0adf75cc 3 This example is a clone of [mbed-os-example-filesystem](https://github.com/ARMmbed/mbed-os-example-filesystem)
ccli8 1:772d0adf75cc 4 and is slightly modified to demonstrate SPI flash-backed Mbed OS file system on Nuvoton Mbed-Enabled targets.
ccli8 1:772d0adf75cc 5
ccli8 1:772d0adf75cc 6 ## Supported platforms
ccli8 1:772d0adf75cc 7 - [NuMaker-PFM-NUC472](https://developer.mbed.org/platforms/Nuvoton-NUC472/)
ccli8 1:772d0adf75cc 8 - [NuMaker-PFM-M453](https://developer.mbed.org/platforms/Nuvoton-M453/)
ccli8 1:772d0adf75cc 9 - [NuMaker-PFM-M487](https://developer.mbed.org/platforms/NUMAKER-PFM-M487/)
ccli8 1:772d0adf75cc 10 - [NuMaker-PFM-NANO130](https://os.mbed.com/platforms/NUMAKER-PFM-NANO130/)
ccli8 1:772d0adf75cc 11
ccli8 1:772d0adf75cc 12 ## Configure SPI pins
ccli8 1:772d0adf75cc 13 You may choose on-board (if supportyed) or externally attached SPI flash
ccli8 1:772d0adf75cc 14 to back Mbed OS file system. To do that, we need to configure SPI pins in `mbed_app.json`.
ccli8 1:772d0adf75cc 15 If the default setting in `mbed_app.json` doesn't match, change it there.
ccli8 1:772d0adf75cc 16
ccli8 1:772d0adf75cc 17 In the following, we take **NuMaker-PFM-M487** board as an example for explanation:
ccli8 1:772d0adf75cc 18
ccli8 1:772d0adf75cc 19 ### On-board SPI flash
ccli8 1:772d0adf75cc 20 If you want to try its on-board SPI flash, set `ONBOARD_SPIF` to true.
ccli8 1:772d0adf75cc 21 - The pins `ONBOARD_SPI_MOSI`/`ONBOARD_SPI_MISO`/`ONBOARD_SPI_CLK`/`ONBOARD_SPI_CS` are for on-board SPI flash.
ccli8 1:772d0adf75cc 22 Don't change them because they are fixed on-board.
ccli8 1:772d0adf75cc 23 - The pins `SPI_MOSI`/`SPI_MISO`/`SPI_CLK`/`SPI_CS` are for externally SPI flash and won't be used.
ccli8 1:772d0adf75cc 24
ccli8 1:772d0adf75cc 25 <pre>
ccli8 1:772d0adf75cc 26 "NUMAKER_PFM_M487": {
ccli8 1:772d0adf75cc 27 "target.macros_add": [
ccli8 1:772d0adf75cc 28 "BUTTON1=SW2"
ccli8 1:772d0adf75cc 29 ],
ccli8 1:772d0adf75cc 30 <b>
ccli8 1:772d0adf75cc 31 "ONBOARD_SPIF": true,
ccli8 1:772d0adf75cc 32 "ONBOARD_SPI_MOSI": "PC_0",
ccli8 1:772d0adf75cc 33 "ONBOARD_SPI_MISO": "PC_1",
ccli8 1:772d0adf75cc 34 "ONBOARD_SPI_CLK": "PC_2",
ccli8 1:772d0adf75cc 35 "ONBOARD_SPI_CS": "PC_3",
ccli8 1:772d0adf75cc 36 </b>
ccli8 1:772d0adf75cc 37 "SPI_MOSI": "D11",
ccli8 1:772d0adf75cc 38 "SPI_MISO": "D12",
ccli8 1:772d0adf75cc 39 "SPI_CLK": "D13",
ccli8 1:772d0adf75cc 40 "SPI_CS": "D10"
ccli8 1:772d0adf75cc 41 },
ccli8 1:772d0adf75cc 42 </pre>
ccli8 1:772d0adf75cc 43
ccli8 1:772d0adf75cc 44 ### Externally attached SPI flash
ccli8 1:772d0adf75cc 45 If you want to try externally attached SPI flash, unset `ONBOARD_SPIF` or set `ONBOARD_SPIF` to false.
ccli8 1:772d0adf75cc 46 - The pins `ONBOARD_SPI_MOSI`/`ONBOARD_SPI_MISO`/`ONBOARD_SPI_CLK`/`ONBOARD_SPI_CS` are for on-board SPI flash and won't be used.
ccli8 1:772d0adf75cc 47 - The pins `SPI_MOSI`/`SPI_MISO`/`SPI_CLK`/`SPI_CS` are for externally attached SPI flash.
ccli8 1:772d0adf75cc 48 Change them if they don't match.
ccli8 1:772d0adf75cc 49
ccli8 1:772d0adf75cc 50 <pre>
ccli8 1:772d0adf75cc 51 "NUMAKER_PFM_M487": {
ccli8 1:772d0adf75cc 52 "target.macros_add": [
ccli8 1:772d0adf75cc 53 "BUTTON1=SW2"
ccli8 1:772d0adf75cc 54 ],
ccli8 1:772d0adf75cc 55 "ONBOARD_SPIF": false,
ccli8 1:772d0adf75cc 56 "ONBOARD_SPI_MOSI": "PC_0",
ccli8 1:772d0adf75cc 57 "ONBOARD_SPI_MISO": "PC_1",
ccli8 1:772d0adf75cc 58 "ONBOARD_SPI_CLK": "PC_2",
ccli8 1:772d0adf75cc 59 "ONBOARD_SPI_CS": "PC_3",
ccli8 1:772d0adf75cc 60 <b>
ccli8 1:772d0adf75cc 61 "SPI_MOSI": "D11",
ccli8 1:772d0adf75cc 62 "SPI_MISO": "D12",
ccli8 1:772d0adf75cc 63 "SPI_CLK": "D13",
ccli8 1:772d0adf75cc 64 "SPI_CS": "D10"
ccli8 1:772d0adf75cc 65 </b>
ccli8 1:772d0adf75cc 66 },
ccli8 1:772d0adf75cc 67 </pre>
ccli8 1:772d0adf75cc 68
ccli8 1:772d0adf75cc 69 ## Trouble-shooting
ccli8 1:772d0adf75cc 70 - As of this writing, Arm's [spif-driver](https://github.com/ARMmbed/spif-driver) uses **Read Data (03h)** command
ccli8 1:772d0adf75cc 71 for read. This command has lower maximum allowed SPI clock rate than **Fast Read (0Bh)**.
ccli8 1:772d0adf75cc 72 Check the specification of your SPI flash of choice for this command's maximum allowed SPI clock rate.
ccli8 1:772d0adf75cc 73
ccli8 1:772d0adf75cc 74 - If you connect your SPI flash through fly-wire, you would meet errors easily with worse signal.
ccli8 1:772d0adf75cc 75 Try lowering the SPI clock rate.
ccli8 1:772d0adf75cc 76 <pre>
ccli8 1:772d0adf75cc 77 SPIFBlockDevice bd(MBED_CONF_APP_SPI_MOSI,
ccli8 1:772d0adf75cc 78 MBED_CONF_APP_SPI_MISO,
ccli8 1:772d0adf75cc 79 MBED_CONF_APP_SPI_CLK,
ccli8 1:772d0adf75cc 80 MBED_CONF_APP_SPI_CS,
ccli8 1:772d0adf75cc 81 <b>1000000</b>);
ccli8 1:772d0adf75cc 82 </pre>
ccli8 1:772d0adf75cc 83
ccli8 1:772d0adf75cc 84 - Dependent on your SPI flash of choice and hardware circuit, besides SPI pins MOSI/MISO/CLK/CS,
ccli8 1:772d0adf75cc 85 you may need to configure other pins of your SPI flash. For example, to access **NuMaker-PFM-M487**'s
ccli8 1:772d0adf75cc 86 on-board SPI flash, we need additionally to configure its /WP and /HOLD pins to high because
ccli8 1:772d0adf75cc 87 we needn't its write-protect and hold functions.
ccli8 1:772d0adf75cc 88 ```
ccli8 1:772d0adf75cc 89 /* We needn't write-protect and hold functions. Configure /WP and /HOLD pins to high. */
ccli8 1:772d0adf75cc 90 DigitalOut onboard_spi_wp(PC_5, 1);
ccli8 1:772d0adf75cc 91 DigitalOut onboard_spi_hold(PC_4, 1);
ccli8 1:772d0adf75cc 92 ```