From b939ebca60e778c599427ace70c8a94f21beced8 Mon Sep 17 00:00:00 2001 From: Simon Hughes Date: Fri, 17 Feb 2017 17:53:12 +0000 Subject: [PATCH] Added mbed_app.json support for definitions of SPI pin names for SDCard support, the default configuration being for the CI test shield plugged into the Arduino header. --- config/mbed_app.json | 118 +++++++++++++++ features/TESTS/filesystem/basic/basic.cpp | 96 +++---------- features/TESTS/filesystem/fopen/fopen.cpp | 98 +++---------- features/filesystem/README.md | 166 +++++++++++++++++++++- 4 files changed, 315 insertions(+), 163 deletions(-) create mode 100644 config/mbed_app.json diff --git a/config/mbed_app.json b/config/mbed_app.json new file mode 100644 index 0000000000..c230f26374 --- /dev/null +++ b/config/mbed_app.json @@ -0,0 +1,118 @@ +{ + "config": { + "UART_RX": "D0", + "UART_TX": "D1", + "DIO_0": "D0", + "DIO_1": "D1", + "DIO_2": "D2", + "DIO_3": "D3", + "DIO_4": "D4", + "DIO_5": "D5", + "DIO_6": "D6", + "DIO_7": "D7", + "DIO_8": "D8", + "DIO_9": "D9", + "SPI_CS": "D10", + "SPI_MOSI": "D11", + "SPI_MISO": "D12", + "SPI_CLK": "D13", + "I2C_SDA": "D14", + "I2C_SCL": "D15", + "I2C_TEMP_ADDR":"0x90", + "I2C_EEPROM_ADDR":"0xA0", + "AIN_0": "A0", + "AIN_1": "A1", + "AIN_2": "A2", + "AIN_3": "A3", + "AIN_4": "A4", + "AIN_5": "A5", + "AOUT" : "A5", + "PWM_0": "D3", + "PWM_1": "D5", + "PWM_2": "D6", + "PWM_3": "D9", + "DEBUG_MSG": 0, + "DEVICE_SPI": 1, + "FSFAT_SDCARD_INSTALLED": 1 + }, + "target_overrides": { + "DISCO_F051R8": { + "SPI_MOSI": "SPI_MOSI", + "SPI_MISO": "SPI_MISO", + "SPI_CLK": "SPI_SCK", + "SPI_CS": "SPI_CS" + }, + "K20D50M": { + "SPI_MOSI": "PTD2", + "SPI_MISO": "PTD3", + "SPI_CLK": "PTD1", + "SPI_CS": "PTC2" + }, + "KL22F": { + "SPI_MOSI": "PTD6", + "SPI_MISO": "PTD7", + "SPI_CLK": "PTD5", + "SPI_CS": "PTD4" + }, + "KL25Z": { + "SPI_MOSI": "PTD2", + "SPI_MISO": "PTD3", + "SPI_CLK": "PTD1", + "SPI_CS": "PTD0" + }, + "KL43Z": { + "SPI_MOSI": "PTD6", + "SPI_MISO": "PTD7", + "SPI_CLK": "PTD5", + "SPI_CS": "PTD4" + }, + "KL46Z": { + "SPI_MOSI": "PTD6", + "SPI_MISO": "PTD7", + "SPI_CLK": "PTD5", + "SPI_CS": "PTD4" + }, + "K64F": { + "SPI_MOSI": "PTE3", + "SPI_MISO": "PTE1", + "SPI_CLK": "PTE2", + "SPI_CS": "PTE4" + }, + "K66F": { + "SPI_MOSI": "PTE3", + "SPI_MISO": "PTE1", + "SPI_CLK": "PTE2", + "SPI_CS": "PTE4" + }, + "LPC11U37H_401": { + "SPI_MOSI": "SDMOSI", + "SPI_MISO": "SDMISO", + "SPI_CLK": "SDSCLK", + "SPI_CS": "SDSSEL" + }, + "LPC2368": { + "SPI_MOSI": "p11", + "SPI_MISO": "p12", + "SPI_CLK": "p13", + "SPI_CS": "p14" + }, + "NUCLEO_L031K6": { + "SPI_MOSI": "SPI_MOSI", + "SPI_MISO": "SPI_MISO", + "SPI_CLK": "SPI_SCK", + "SPI_CS": "SPI_CS" + }, + "nRF51822": { + "SPI_MOSI": "p12", + "SPI_MISO": "p13", + "SPI_CLK": "p15", + "SPI_CS": "p14" + }, + "RZ_A1H": { + "SPI_MOSI": "P8_5", + "SPI_MISO": "P8_6", + "SPI_CLK": "P8_3", + "SPI_CS": "P8_4" + } + } +} diff --git a/features/TESTS/filesystem/basic/basic.cpp b/features/TESTS/filesystem/basic/basic.cpp index 13c2ba4c7d..51a5583376 100644 --- a/features/TESTS/filesystem/basic/basic.cpp +++ b/features/TESTS/filesystem/basic/basic.cpp @@ -46,6 +46,7 @@ */ #include "mbed.h" +#include "mbed_config.h" #include "FATFileSystem.h" #include "SDBlockDevice.h" #include "test_env.h" @@ -67,18 +68,21 @@ using namespace utest::v1; /* DEVICE_SPI * This symbol is defined in targets.json if the target has a SPI interface, which is required for SDCard support. - * FSFAT_SDCARD_INSTALLTED - * For testing purposes, an SDCard must be installed on the target for the test cases in this file to succeed. - * If the target has an SD card installed then uncomment the #define FSFAT_SDCARD_INSTALLED directive for the target. * - * Notes - * The following 2 lines should be instated to perform the tests in this file: - * #define FSFAT_SDCARD_INSTALLED - * #define DEVICE_SPI + * MBED_CONF_APP_FSFAT_SDCARD_INSTALLED + * For testing purposes, an SDCard must be installed on the target for the test cases in this file to succeed. + * If the target has an SD card installed then the MBED_CONF_APP_FSFAT_SDCARD_INSTALLED will be generated + * from the mbed_app.json, which includes the line + * { + * "config": { + * "UART_RX": "D0", + * <<< lines removed >>> + * "DEVICE_SPI": 1, + * "MBED_CONF_APP_FSFAT_SDCARD_INSTALLED": 1 + * }, + * <<< lines removed >>> */ -#define FSFAT_SDCARD_INSTALLED -#define DEVICE_SPI -#if defined(DEVICE_SPI) && defined(FSFAT_SDCARD_INSTALLED) +#if defined(DEVICE_SPI) && defined(MBED_CONF_APP_FSFAT_SDCARD_INSTALLED) #define FSFAT_BASIC_TEST_00 fsfat_basic_test_00 #define FSFAT_BASIC_TEST_01 fsfat_basic_test_01 @@ -94,77 +98,9 @@ const int FSFAT_BASIC_DATA_SIZE = 256; static char fsfat_basic_msg_g[FSFAT_BASIC_MSG_BUF_SIZE]; -#if defined(TARGET_KL25Z) -SDBlockDevice sd(PTD2, PTD3, PTD1, PTD0); +SDBlockDevice sd(MBED_CONF_APP_SPI_MOSI, MBED_CONF_APP_SPI_MISO, MBED_CONF_APP_SPI_CLK, MBED_CONF_APP_SPI_CS); FATFileSystem fs(sd_mount_pt, &sd); -#elif defined(TARGET_KL46Z) || defined(TARGET_KL43Z) -SDBlockDevice sd(PTD6, PTD7, PTD5, PTD4); -FATFileSystem fs(sd_mount_pt, &sd); - -#elif defined(TARGET_K64F) || defined(TARGET_K66F) -SDBlockDevice sd(PTE3, PTE1, PTE2, PTE4); -FATFileSystem fs(sd_mount_pt, &sd); - -#elif defined(TARGET_K22F) -SDBlockDevice sd(PTD6, PTD7, PTD5, PTD4); -FATFileSystem fs(sd_mount_pt, &sd); - -#elif defined(TARGET_K20D50M) -SDBlockDevice sd(PTD2, PTD3, PTD1, PTC2); -FATFileSystem fs(sd_mount_pt, &sd); - -#elif defined(TARGET_nRF51822) -SDBlockDevice sd(p12, p13, p15, p14); -FATFileSystem fs(sd_mount_pt, &sd); - -#elif defined(TARGET_NUCLEO_F030R8) || \ - defined(TARGET_NUCLEO_F070RB) || \ - defined(TARGET_NUCLEO_F072RB) || \ - defined(TARGET_NUCLEO_F091RC) || \ - defined(TARGET_NUCLEO_F103RB) || \ - defined(TARGET_NUCLEO_F302R8) || \ - defined(TARGET_NUCLEO_F303RE) || \ - defined(TARGET_NUCLEO_F334R8) || \ - defined(TARGET_NUCLEO_F401RE) || \ - defined(TARGET_NUCLEO_F410RB) || \ - defined(TARGET_NUCLEO_F411RE) || \ - defined(TARGET_NUCLEO_L053R8) || \ - defined(TARGET_NUCLEO_L073RZ) || \ - defined(TARGET_NUCLEO_L152RE) -SDBlockDevice sd(D11, D12, D13, D10); -FATFileSystem fs(sd_mount_pt, &sd); - -#elif defined(TARGET_DISCO_F051R8) || \ - defined(TARGET_NUCLEO_L031K6) -SDBlockDevice sd(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS); -FATFileSystem fs(sd_mount_pt, &sd); - -#elif defined(TARGET_LPC2368) -SDBlockDevice sd(p11, p12, p13, p14); -FATFileSystem fs(sd_mount_pt, &sd); - -#elif defined(TARGET_LPC11U68) -SDBlockDevice sd(D11, D12, D13, D10); -FATFileSystem fs(sd_mount_pt, &sd); - -#elif defined(TARGET_LPC1549) -SDBlockDevice sd(D11, D12, D13, D10); -FATFileSystem fs(sd_mount_pt, &sd); - -#elif defined(TARGET_RZ_A1H) -SDBlockDevice sd(P8_5, P8_6, P8_3, P8_4); -FATFileSystem fs(sd_mount_pt, &sd); - -#elif defined(TARGET_LPC11U37H_401) -SDBlockDevice sd(SDMOSI, SDMISO, SDSCLK, SDSSEL); -FATFileSystem fs(sd_mount_pt, &sd); - -#else -#error "[NOT SUPPORTED] Instantiate SDBlockDevice sd(p11, p12, p13, p14) with the correct pin specification for target" -#endif - - #define FSFAT_BASIC_MSG(_buf, _max_len, _fmt, ...) \ do \ { \ @@ -507,7 +443,7 @@ static control_t fsfat_basic_test_dummy() return CaseNext; } -#endif /* defined(DEVICE_SPI) && defined(FSFAT_SDCARD_INSTALLED) */ +#endif /* defined(DEVICE_SPI) && defined(MBED_CONF_APP_FSFAT_SDCARD_INSTALLED) */ utest::v1::status_t greentea_setup(const size_t number_of_cases) { diff --git a/features/TESTS/filesystem/fopen/fopen.cpp b/features/TESTS/filesystem/fopen/fopen.cpp index 19a57481bd..81efcbee6a 100644 --- a/features/TESTS/filesystem/fopen/fopen.cpp +++ b/features/TESTS/filesystem/fopen/fopen.cpp @@ -22,6 +22,7 @@ */ #include "mbed.h" +#include "mbed_config.h" #include "SDBlockDevice.h" #include "FATFileSystem.h" #include "fsfat_debug.h" @@ -44,6 +45,7 @@ #include #endif using namespace utest::v1; +//using namespace mbed; /// @cond FSFAT_DOXYGEN_DISABLE #ifdef FSFAT_DEBUG @@ -56,18 +58,21 @@ using namespace utest::v1; /* DEVICE_SPI * This symbol is defined in targets.json if the target has a SPI interface, which is required for SDCard support. - * FSFAT_SDCARD_INSTALLTED - * For testing purposes, an SDCard must be installed on the target for the test cases in this file to succeed. - * If the target has an SD card installed then uncomment the #define FSFAT_SDCARD_INSTALLED directive for the target. * - * Notes - * The following 2 lines should be instated to perform the tests in this file: - * #define FSFAT_SDCARD_INSTALLED - * #define DEVICE_SPI + * MBED_CONF_APP_FSFAT_SDCARD_INSTALLED + * For testing purposes, an SDCard must be installed on the target for the test cases in this file to succeed. + * If the target has an SD card installed then the MBED_CONF_APP_FSFAT_SDCARD_INSTALLED will be generated + * from the mbed_app.json, which includes the line + * { + * "config": { + * "UART_RX": "D0", + * <<< lines removed >>> + * "DEVICE_SPI": 1, + * "FSFAT_SDCARD_INSTALLED": 1 + * }, + * <<< lines removed >>> */ -#define FSFAT_SDCARD_INSTALLED -#define DEVICE_SPI -#if defined(DEVICE_SPI) && defined(FSFAT_SDCARD_INSTALLED) +#if defined(DEVICE_SPI) && defined(MBED_CONF_APP_FSFAT_SDCARD_INSTALLED) static char fsfat_fopen_utest_msg_g[FSFAT_UTEST_MSG_BUF_SIZE]; #define FSFAT_FOPEN_TEST_MOUNT_PT_NAME "sd" @@ -77,78 +82,9 @@ static char fsfat_fopen_utest_msg_g[FSFAT_UTEST_MSG_BUF_SIZE]; static const char *sd_badfile_path = "/sd/badfile.txt"; static const char *sd_testfile_path = "/sd/test.txt"; - -#if defined(TARGET_KL25Z) -SDBlockDevice sd(PTD2, PTD3, PTD1, PTD0); +SDBlockDevice sd(MBED_CONF_APP_SPI_MOSI, MBED_CONF_APP_SPI_MISO, MBED_CONF_APP_SPI_CLK, MBED_CONF_APP_SPI_CS); FATFileSystem fs("sd", &sd); -#elif defined(TARGET_KL46Z) || defined(TARGET_KL43Z) -SDBlockDevice sd(PTD6, PTD7, PTD5, PTD4); -FATFileSystem fs("sd", &sd); - -#elif defined(TARGET_K64F) || defined(TARGET_K66F) -SDBlockDevice sd(PTE3, PTE1, PTE2, PTE4); -FATFileSystem fs("sd", &sd); - -#elif defined(TARGET_K22F) -SDBlockDevice sd(PTD6, PTD7, PTD5, PTD4); -FATFileSystem fs("sd", &sd); - -#elif defined(TARGET_K20D50M) -SDBlockDevice sd(PTD2, PTD3, PTD1, PTC2); -FATFileSystem fs("sd", &sd); - -#elif defined(TARGET_nRF51822) -SDBlockDevice sd(p12, p13, p15, p14); -FATFileSystem fs("sd", &sd); - -#elif defined(TARGET_NUCLEO_F030R8) || \ - defined(TARGET_NUCLEO_F070RB) || \ - defined(TARGET_NUCLEO_F072RB) || \ - defined(TARGET_NUCLEO_F091RC) || \ - defined(TARGET_NUCLEO_F103RB) || \ - defined(TARGET_NUCLEO_F302R8) || \ - defined(TARGET_NUCLEO_F303RE) || \ - defined(TARGET_NUCLEO_F334R8) || \ - defined(TARGET_NUCLEO_F401RE) || \ - defined(TARGET_NUCLEO_F410RB) || \ - defined(TARGET_NUCLEO_F411RE) || \ - defined(TARGET_NUCLEO_L053R8) || \ - defined(TARGET_NUCLEO_L073RZ) || \ - defined(TARGET_NUCLEO_L152RE) -SDBlockDevice sd(D11, D12, D13, D10); -FATFileSystem fs("sd", &sd); - -#elif defined(TARGET_DISCO_F051R8) || \ - defined(TARGET_NUCLEO_L031K6) -SDBlockDevice sd(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS); -FATFileSystem fs("sd", &sd); - -#elif defined(TARGET_LPC2368) -SDBlockDevice sd(p11, p12, p13, p14); -FATFileSystem fs("sd", &sd); - -#elif defined(TARGET_LPC11U68) -SDBlockDevice sd(D11, D12, D13, D10); -FATFileSystem fs("sd", &sd); - -#elif defined(TARGET_LPC1549) -SDBlockDevice sd(D11, D12, D13, D10); -FATFileSystem fs("sd", &sd); - -#elif defined(TARGET_RZ_A1H) -SDBlockDevice sd(P8_5, P8_6, P8_3, P8_4); -FATFileSystem fs("sd", &sd); - -#elif defined(TARGET_LPC11U37H_401) -SDBlockDevice sd(SDMOSI, SDMISO, SDSCLK, SDSSEL); -FATFileSystem fs("sd", &sd); - -#else -#error "[NOT SUPPORTED] Instantiate SDBlockDevice sd(p11, p12, p13, p14) with the correct pin specification for target" -#endif - - #define FSFAT_FOPEN_TEST_01 fsfat_fopen_test_01 #define FSFAT_FOPEN_TEST_02 fsfat_fopen_test_02 #define FSFAT_FOPEN_TEST_03 fsfat_fopen_test_03 @@ -1548,7 +1484,7 @@ static control_t fsfat_fopen_test_dummy() return CaseNext; } -#endif /* defined(DEVICE_SPI) && defined(FSFAT_SDCARD_INSTALLED) */ +#endif /* defined(DEVICE_SPI) && defined(MBED_CONF_APP_FSFAT_SDCARD_INSTALLED) */ /// @cond FSFAT_DOXYGEN_DISABLE diff --git a/features/filesystem/README.md b/features/filesystem/README.md index 1e3719b371..ebed4453d9 100644 --- a/features/filesystem/README.md +++ b/features/filesystem/README.md @@ -92,16 +92,178 @@ Switch to the `feature-storage` branch using the following commands: simhug01@E107851:/d/demo_area/ex_app1$ +When the feature-storage branch has been merged to master, then the following the sd-driver repository should also be cloned: + + simhug01@E107851:/d/demo_area/ex_app1$ mbed import https://github.com/ARMmbed/sd-driver + +Copy the mbed_app.json file to the top level of the project: + + simhug01@E107851:/d/demo_area/ex_app1$ cp sd-driver/config/mbed_app.json . + Build the test cases for the K64F target using the following commands: - simhug01@E107851:/d/demo_area/ex_app1$ mbed -v test --compile -t GCC_ARM -m K64F -DFSFAT_SDCARD_INSTALLED 2>&1 | tee build_tests_gcc_20161219_1007.txt + simhug01@E107851:/d/demo_area/ex_app1$ mbed -v test --compile -t GCC_ARM -m K64F --app-config mbed_app.json 2>&1 | tee build_tests_gcc_20161219_1007.txt simhug01@E107851:/d/demo_area/ex_app1$ The complete [build log][BUILD-TESTS-GCC-20161219-1007] is available for reference. -### Insert SDCard into K64F +### Testing with an SDCard on Target XYZ + +The standard way to test is with the mbed CI Test Shield plugged into the target board. This pin mapping for this configuration is parameeterised in the mbed_app.json file. + +The following is an example of the mbed_app.json file that was defined in the project at the time of writing: + + { + "config": { + "UART_RX": "D0", + "UART_TX": "D1", + "DIO_0": "D0", + "DIO_1": "D1", + "DIO_2": "D2", + "DIO_3": "D3", + "DIO_4": "D4", + "DIO_5": "D5", + "DIO_6": "D6", + "DIO_7": "D7", + "DIO_8": "D8", + "DIO_9": "D9", + "SPI_CS": "D10", + "SPI_MOSI": "D11", + "SPI_MISO": "D12", + "SPI_CLK": "D13", + "I2C_SDA": "D14", + "I2C_SCL": "D15", + "I2C_TEMP_ADDR":"0x90", + "I2C_EEPROM_ADDR":"0xA0", + "AIN_0": "A0", + "AIN_1": "A1", + "AIN_2": "A2", + "AIN_3": "A3", + "AIN_4": "A4", + "AIN_5": "A5", + "AOUT" : "A5", + "PWM_0": "D3", + "PWM_1": "D5", + "PWM_2": "D6", + "PWM_3": "D9", + "DEBUG_MSG": 0, + "DEVICE_SPI": 1, + "FSFAT_SDCARD_INSTALLED": 1 + }, + "target_overrides": { + "DISCO_F051R8": { + "SPI_MOSI": "SPI_MOSI", + "SPI_MISO": "SPI_MISO", + "SPI_CLK": "SPI_SCK", + "SPI_CS": "SPI_CS" + }, + "K20D50M": { + "SPI_MOSI": "PTD2", + "SPI_MISO": "PTD3", + "SPI_CLK": "PTD1", + "SPI_CS": "PTC2" + }, + "KL22F": { + "SPI_MOSI": "PTD6", + "SPI_MISO": "PTD7", + "SPI_CLK": "PTD5", + "SPI_CS": "PTD4" + }, + "KL25Z": { + "SPI_MOSI": "PTD2", + "SPI_MISO": "PTD3", + "SPI_CLK": "PTD1", + "SPI_CS": "PTD0" + }, + "KL43Z": { + "SPI_MOSI": "PTD6", + "SPI_MISO": "PTD7", + "SPI_CLK": "PTD5", + "SPI_CS": "PTD4" + }, + "KL46Z": { + "SPI_MOSI": "PTD6", + "SPI_MISO": "PTD7", + "SPI_CLK": "PTD5", + "SPI_CS": "PTD4" + }, + "K64F": { + "SPI_MOSI": "PTE3", + "SPI_MISO": "PTE1", + "SPI_CLK": "PTE2", + "SPI_CS": "PTE4" + }, + "K66F": { + "SPI_MOSI": "PTE3", + "SPI_MISO": "PTE1", + "SPI_CLK": "PTE2", + "SPI_CS": "PTE4" + }, + "LPC11U37H_401": { + "SPI_MOSI": "SDMOSI", + "SPI_MISO": "SDMISO", + "SPI_CLK": "SDSCLK", + "SPI_CS": "SDSSEL" + }, + "LPC2368": { + "SPI_MOSI": "p11", + "SPI_MISO": "p12", + "SPI_CLK": "p13", + "SPI_CS": "p14" + }, + "NUCLEO_L031K6": { + "SPI_MOSI": "SPI_MOSI", + "SPI_MISO": "SPI_MISO", + "SPI_CLK": "SPI_SCK", + "SPI_CS": "SPI_CS" + }, + "nRF51822": { + "SPI_MOSI": "p12", + "SPI_MISO": "p13", + "SPI_CLK": "p15", + "SPI_CS": "p14" + }, + "RZ_A1H": { + "SPI_MOSI": "P8_5", + "SPI_MISO": "P8_6", + "SPI_CLK": "P8_3", + "SPI_CS": "P8_4" + } + } + } + +Note the following things about the mbed_app.json file: + +- The mbed_app.json is used to define target specific symbols for the SPI pins used to connect the SDCard slot to the target MCU: + - "SPI\_CS". + - "SPI\_MOSI". + - "SPI\_MISO". + - "SPI\_CLK". +- The default configuration is defined in the "config" section for mappings to the standard Arduino header pins for the SPI bus. + The "config" section defines a dictionary which maps functional names to target board Arduino header pins: + - "SPI\_CS": "D10". This causes the MBED\_CONF\_APP\_SPI\_CS symbol to be defined in mbed\_config.h as D10, which is used in the filesystem test implementation. + D10 is defined in the target specific PinNames.h file. + - "SPI\_MOSI": "D11". This causes the MBED\_CONF\_APP\_SPI\_MOSI symbol to be defined in mbed\_config.h. + - "SPI\_MISO": "D12". This causes the MBED\_CONF\_APP\_SPI\_MISO symbol to be defined in mbed\_config.h. + - "SPI\_CLK": "D13". This causes the MBED\_CONF\_APP\_SPI\_CLK symbol to be defined in mbed\_config.h. +- The ""target_overrides" is used to override the "SPI\_xxx" symbols for specific target boards, which may have an SDCard slot, for example. + This is the case for the K64F, where the "SPI\_xxx" are mapped to the pin names for the on-board SDCard + + ``` + "K64F": { + "SPI_MOSI": "PTE3", + "SPI_MISO": "PTE1", + "SPI_CLK": "PTE2", + "SPI_CS": "PTE4" + } + ``` +- Thus, in the absence of any target specific definitions in the "target_overrides" section, all boards will default to + use the Arduino header configuration. + + +#### Insert SDCard into K64F The test cases have been run on a K64F with the following microSDHC cards: