From 4588bc42723e9f53c63eefd832616175536bccfe Mon Sep 17 00:00:00 2001 From: Chun-Chieh Li Date: Tue, 16 Jul 2019 15:36:09 +0800 Subject: [PATCH] Support NUMAKER_IOT_M263A Based on mbed-os-pelion-example master/mbed-bootloader 4.1.0/mbed-cloud-client 4.0.0, support Nuvoton targets: 1. Support Nuvoton targets: - NUMAKER_IOT_M263A 2. Change storage to NUSD (SD card in SDIO bus mode) from SD (SD card SPI bus mode) (1) Add COMPONENT_NUSD.lib. (2) Add component NUSD (target.components_add). (3) Change default BlockDevice to NUSD: Override BlockDevice::get_default_instance (nusd.provide-default-blockdevice). Required since mbed-cloud-client 2.1.0 (arm_uc_blockdevice_ext) or in: mbed-bootloader/modules/storage/pal-blockdevice/source/arm_uc_pal_blockdevice_mbed.cpp (4) Enable kvstore with blockdevice type being "other". i) Override get_other_blockdevice() (nusd.provide-kvstore-other-blockdevice). ii) Configure storage type to "FILESYSTEM". iii)Configure file system type to "LITTLE". vi) Configure block device type to "other". v) Configure external size to 64MiB, which cannot overlap with update-client. storage-address/update-client.storage-size. 3. Change back UARTSerial tx/rx buffer size from 1024/1024 to 256/256. This can reduce memory footprint by (1024 - 256) * 2 = 1.5KiB. Because this configuration influences both ESP8266 and default console (platfrom/mbed_retarget.cpp), memory reduction can achieve 1.5KiB x 2 = 3KiB. 4. Enlarge ESP8266 'send tcp data' timeout on Nuvoton targets Pelion connection has some failure rate with this. Enlarging ESP8266_SEND_TIMEOUT can just relieve the issue. A ticket has raised to address it: https://github.com/ARMmbed/mbed-os/issues/11544 5. Requirements for mbed-os version: - mbed-os 5.13.0 (or afterwards) to support kvstore with block device type being "other" - mbed-os 5.13.1 (or afterwards) to fix 'undefined pal_plat_osEntropyInject(...)' error - mbed-os 5.14.0 (or afterwards) to support NUMAKER_IOT_M263A --- ...r-m263_iot-block_device-kvstore-v4.1.0.bin | Bin 0 -> 39364 bytes drivers/storage/COMPONENT_NUSD.lib | 1 + mbed_app.json | 30 ++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 bootloader/mbed-bootloader-m263_iot-block_device-kvstore-v4.1.0.bin create mode 100644 drivers/storage/COMPONENT_NUSD.lib diff --git a/bootloader/mbed-bootloader-m263_iot-block_device-kvstore-v4.1.0.bin b/bootloader/mbed-bootloader-m263_iot-block_device-kvstore-v4.1.0.bin new file mode 100644 index 0000000000000000000000000000000000000000..ee4251637b2c4e96e82dd1d8a19ce05662238bec GIT binary patch literal 39364 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 Z;B_KLsF1rO=tzLqtqO>HJa}>J{{iaGt5yI2 literal 0 HcmV?d00001 diff --git a/drivers/storage/COMPONENT_NUSD.lib b/drivers/storage/COMPONENT_NUSD.lib new file mode 100644 index 0000000..e880349 --- /dev/null +++ b/drivers/storage/COMPONENT_NUSD.lib @@ -0,0 +1 @@ +https://github.com/OpenNuvoton/NuMaker-mbed-SD-driver/#56406071a4468a8302c0717a4467a241d152ade2 diff --git a/mbed_app.json b/mbed_app.json index f223de4..8d54ef6 100644 --- a/mbed_app.json +++ b/mbed_app.json @@ -134,6 +134,36 @@ "sd.SPI_CLK" : "PC_7", "sd.SPI_CS" : "PB_9" }, + "NUMAKER_IOT_M263A": { + "target.network-default-interface-type" : "WIFI", + "target.bootloader_img" : "bootloader/mbed-bootloader-m263_iot-block_device-kvstore-v4.1.0.bin", + "bootloader-size" : "(64*1024)", + "target.header_offset" : "0x12000", + "target.app_offset" : "0x12400", + "target.components_add" : ["NUSD"], + "nusd.provide-default-blockdevice" : true, + "nusd.provide-kvstore-other-blockdevice" : true, + "update-client.bootloader-details" : "0x0", + "update-client.application-details" : "0x12000", + "update-client.storage-address" : "(1024*1024*64)", + "update-client.storage-size" : "((MBED_ROM_START + MBED_ROM_SIZE - APPLICATION_ADDR) * MBED_CONF_UPDATE_CLIENT_STORAGE_LOCATIONS)", + "update-client.storage-locations" : 1, + "mbed-cloud-client.update-storage" : "ARM_UCP_FLASHIAP_BLOCKDEVICE", + "storage.storage_type" : "FILESYSTEM", + "storage_filesystem.filesystem" : "LITTLE", + "storage_filesystem.blockdevice" : "other", + "storage_filesystem.internal_base_address" : "(MBED_ROM_START + MBED_BOOTLOADER_SIZE)", + "storage_filesystem.rbp_internal_size" : "(2*4*1024)", + "storage_filesystem.external_base_address" : "(0x0)", + "storage_filesystem.external_size" : "(1024*1024*64)", + "esp8266.tx" : "PC_7", + "esp8266.rx" : "PC_6", + "esp8266.rts" : "PE_13", + "esp8266.cts" : "PC_8", + "esp8266.rst" : "PE_12", + "esp8266.provide-default" : true, + "target.macros_add" : ["MBEDTLS_USER_CONFIG_FILE=\"mbedTLSConfig_mbedOS.h\"", "ESP8266_SEND_TIMEOUT=8000"] + }, "DISCO_L475VG_IOT01A": { "target.macros_add" : ["MBEDTLS_USER_CONFIG_FILE=\"mbedTLSConfig_mbedOS.h\""], "target.network-default-interface-type" : "WIFI",