Nuvoton
/
NuMaker-mbed-SPIF-FileSystem-example
NuMaker SPI flash-backed file system
README.md@11:82c5a2fca797, 14 months ago (annotated)
- 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?
User | Revision | Line number | New 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 | ``` |