Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Thu Oct 11 02:27:46 2018 +0000
Revision:
3:f3764f852aa8
Parent:
0:8fdf9a60065b
Nucreo 446 + SSD1331 test version;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kadonotakashi 0:8fdf9a60065b 1
kadonotakashi 0:8fdf9a60065b 2 /* mbed Microcontroller Library
kadonotakashi 0:8fdf9a60065b 3 * Copyright (c) 2017 ARM Limited
kadonotakashi 0:8fdf9a60065b 4 *
kadonotakashi 0:8fdf9a60065b 5 * Licensed under the Apache License, Version 2.0 (the "License");
kadonotakashi 0:8fdf9a60065b 6 * you may not use this file except in compliance with the License.
kadonotakashi 0:8fdf9a60065b 7 * You may obtain a copy of the License at
kadonotakashi 0:8fdf9a60065b 8 *
kadonotakashi 0:8fdf9a60065b 9 * http://www.apache.org/licenses/LICENSE-2.0
kadonotakashi 0:8fdf9a60065b 10 *
kadonotakashi 0:8fdf9a60065b 11 * Unless required by applicable law or agreed to in writing, software
kadonotakashi 0:8fdf9a60065b 12 * distributed under the License is distributed on an "AS IS" BASIS,
kadonotakashi 0:8fdf9a60065b 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kadonotakashi 0:8fdf9a60065b 14 * See the License for the specific language governing permissions and
kadonotakashi 0:8fdf9a60065b 15 * limitations under the License.
kadonotakashi 0:8fdf9a60065b 16 */
kadonotakashi 0:8fdf9a60065b 17
kadonotakashi 0:8fdf9a60065b 18 #if !DEVICE_FLASH
kadonotakashi 0:8fdf9a60065b 19 #error [NOT_SUPPORTED] Flash API not supported for this target
kadonotakashi 0:8fdf9a60065b 20 #endif
kadonotakashi 0:8fdf9a60065b 21
kadonotakashi 0:8fdf9a60065b 22 #include "utest/utest.h"
kadonotakashi 0:8fdf9a60065b 23 #include "utest/utest_serial.h"
kadonotakashi 0:8fdf9a60065b 24 #include "unity/unity.h"
kadonotakashi 0:8fdf9a60065b 25 #include "greentea-client/test_env.h"
kadonotakashi 0:8fdf9a60065b 26 #include "FlashIAP.h"
kadonotakashi 0:8fdf9a60065b 27 #include "unity.h"
kadonotakashi 0:8fdf9a60065b 28 #include <algorithm>
kadonotakashi 0:8fdf9a60065b 29
kadonotakashi 0:8fdf9a60065b 30 #include "mbed.h"
kadonotakashi 0:8fdf9a60065b 31
kadonotakashi 0:8fdf9a60065b 32 using namespace utest::v1;
kadonotakashi 0:8fdf9a60065b 33
kadonotakashi 0:8fdf9a60065b 34
kadonotakashi 0:8fdf9a60065b 35 void flashiap_init_test()
kadonotakashi 0:8fdf9a60065b 36 {
kadonotakashi 0:8fdf9a60065b 37 FlashIAP flash_device;
kadonotakashi 0:8fdf9a60065b 38 uint32_t ret = flash_device.init();
kadonotakashi 0:8fdf9a60065b 39 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 40 ret = flash_device.deinit();
kadonotakashi 0:8fdf9a60065b 41 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 42 }
kadonotakashi 0:8fdf9a60065b 43
kadonotakashi 0:8fdf9a60065b 44 void flashiap_program_test()
kadonotakashi 0:8fdf9a60065b 45 {
kadonotakashi 0:8fdf9a60065b 46 FlashIAP flash_device;
kadonotakashi 0:8fdf9a60065b 47 uint32_t ret = flash_device.init();
kadonotakashi 0:8fdf9a60065b 48 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 49
kadonotakashi 0:8fdf9a60065b 50 // get the last sector size (flash size - 1)
kadonotakashi 0:8fdf9a60065b 51 uint32_t sector_size = flash_device.get_sector_size(flash_device.get_flash_start() + flash_device.get_flash_size() - 1UL);
kadonotakashi 0:8fdf9a60065b 52 uint32_t page_size = flash_device.get_page_size();
kadonotakashi 0:8fdf9a60065b 53 TEST_ASSERT_NOT_EQUAL(0, sector_size);
kadonotakashi 0:8fdf9a60065b 54 TEST_ASSERT_NOT_EQUAL(0, page_size);
kadonotakashi 0:8fdf9a60065b 55 TEST_ASSERT_TRUE(sector_size % page_size == 0);
kadonotakashi 0:8fdf9a60065b 56 uint32_t prog_size = std::max(page_size, (uint32_t)8);
kadonotakashi 0:8fdf9a60065b 57 uint8_t *data = new uint8_t[prog_size + 2];
kadonotakashi 0:8fdf9a60065b 58 for (uint32_t i = 0; i < prog_size + 2; i++) {
kadonotakashi 0:8fdf9a60065b 59 data[i] = i;
kadonotakashi 0:8fdf9a60065b 60 }
kadonotakashi 0:8fdf9a60065b 61
kadonotakashi 0:8fdf9a60065b 62 // the one before the last sector in the system
kadonotakashi 0:8fdf9a60065b 63 uint32_t address = (flash_device.get_flash_start() + flash_device.get_flash_size()) - (sector_size);
kadonotakashi 0:8fdf9a60065b 64 TEST_ASSERT_TRUE(address != 0UL);
kadonotakashi 0:8fdf9a60065b 65 utest_printf("ROM ends at 0x%lx, test starts at 0x%lx\n", FLASHIAP_ROM_END, address);
kadonotakashi 0:8fdf9a60065b 66 TEST_SKIP_UNLESS_MESSAGE(address >= FLASHIAP_ROM_END, "Test skipped. Test region overlaps code.");
kadonotakashi 0:8fdf9a60065b 67
kadonotakashi 0:8fdf9a60065b 68 ret = flash_device.erase(address, sector_size);
kadonotakashi 0:8fdf9a60065b 69 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 70
kadonotakashi 0:8fdf9a60065b 71
kadonotakashi 0:8fdf9a60065b 72 for (uint32_t i = 0; i < sector_size / prog_size; i++) {
kadonotakashi 0:8fdf9a60065b 73 uint32_t prog_addr = address + i * prog_size;
kadonotakashi 0:8fdf9a60065b 74 ret = flash_device.program(data, prog_addr, prog_size);
kadonotakashi 0:8fdf9a60065b 75 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 76 }
kadonotakashi 0:8fdf9a60065b 77
kadonotakashi 0:8fdf9a60065b 78 uint8_t *data_flashed = new uint8_t[prog_size];
kadonotakashi 0:8fdf9a60065b 79 for (uint32_t i = 0; i < sector_size / prog_size; i++) {
kadonotakashi 0:8fdf9a60065b 80 uint32_t page_addr = address + i * prog_size;
kadonotakashi 0:8fdf9a60065b 81 ret = flash_device.read(data_flashed, page_addr, prog_size);
kadonotakashi 0:8fdf9a60065b 82 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 83 TEST_ASSERT_EQUAL_UINT8_ARRAY(data, data_flashed, prog_size);
kadonotakashi 0:8fdf9a60065b 84 }
kadonotakashi 0:8fdf9a60065b 85
kadonotakashi 0:8fdf9a60065b 86 // check programming of unaligned buffer and size
kadonotakashi 0:8fdf9a60065b 87 ret = flash_device.erase(address, sector_size);
kadonotakashi 0:8fdf9a60065b 88 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 89 ret = flash_device.program(data + 2, address, prog_size);
kadonotakashi 0:8fdf9a60065b 90 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 91 ret = flash_device.read(data_flashed, address, prog_size - 1);
kadonotakashi 0:8fdf9a60065b 92 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 93 TEST_ASSERT_EQUAL_UINT8_ARRAY(data + 2, data_flashed, prog_size - 1);
kadonotakashi 0:8fdf9a60065b 94
kadonotakashi 0:8fdf9a60065b 95 delete[] data;
kadonotakashi 0:8fdf9a60065b 96 delete[] data_flashed;
kadonotakashi 0:8fdf9a60065b 97
kadonotakashi 0:8fdf9a60065b 98 ret = flash_device.deinit();
kadonotakashi 0:8fdf9a60065b 99 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 100 }
kadonotakashi 0:8fdf9a60065b 101
kadonotakashi 0:8fdf9a60065b 102
kadonotakashi 0:8fdf9a60065b 103 void flashiap_cross_sector_program_test()
kadonotakashi 0:8fdf9a60065b 104 {
kadonotakashi 0:8fdf9a60065b 105 FlashIAP flash_device;
kadonotakashi 0:8fdf9a60065b 106 uint32_t ret = flash_device.init();
kadonotakashi 0:8fdf9a60065b 107 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 108
kadonotakashi 0:8fdf9a60065b 109 uint32_t page_size = flash_device.get_page_size();
kadonotakashi 0:8fdf9a60065b 110
kadonotakashi 0:8fdf9a60065b 111 // Erase last two sectors
kadonotakashi 0:8fdf9a60065b 112 uint32_t address = flash_device.get_flash_start() + flash_device.get_flash_size();
kadonotakashi 0:8fdf9a60065b 113 uint32_t sector_size, agg_size = 0;
kadonotakashi 0:8fdf9a60065b 114 for (uint32_t i = 0; i < 2; i++) {
kadonotakashi 0:8fdf9a60065b 115 sector_size = flash_device.get_sector_size(address - 1UL);
kadonotakashi 0:8fdf9a60065b 116 TEST_ASSERT_NOT_EQUAL(0, sector_size);
kadonotakashi 0:8fdf9a60065b 117 TEST_ASSERT_TRUE(sector_size % page_size == 0);
kadonotakashi 0:8fdf9a60065b 118 agg_size += sector_size;
kadonotakashi 0:8fdf9a60065b 119 address -= sector_size;
kadonotakashi 0:8fdf9a60065b 120 }
kadonotakashi 0:8fdf9a60065b 121 TEST_SKIP_UNLESS_MESSAGE(address >= FLASHIAP_ROM_END, "Test skipped. Test region overlaps code.");
kadonotakashi 0:8fdf9a60065b 122 ret = flash_device.erase(address, agg_size);
kadonotakashi 0:8fdf9a60065b 123 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 124
kadonotakashi 0:8fdf9a60065b 125 address += sector_size - page_size;
kadonotakashi 0:8fdf9a60065b 126 uint32_t aligned_prog_size = 2 * page_size;
kadonotakashi 0:8fdf9a60065b 127 uint32_t prog_size = aligned_prog_size;
kadonotakashi 0:8fdf9a60065b 128 if (page_size > 1) {
kadonotakashi 0:8fdf9a60065b 129 prog_size--;
kadonotakashi 0:8fdf9a60065b 130 }
kadonotakashi 0:8fdf9a60065b 131 uint8_t *data = new uint8_t[aligned_prog_size];
kadonotakashi 0:8fdf9a60065b 132 for (uint32_t i = 0; i < prog_size; i++) {
kadonotakashi 0:8fdf9a60065b 133 data[i] = rand() % 256;
kadonotakashi 0:8fdf9a60065b 134 }
kadonotakashi 0:8fdf9a60065b 135 for (uint32_t i = prog_size; i < aligned_prog_size; i++) {
kadonotakashi 0:8fdf9a60065b 136 data[i] = 0xFF;
kadonotakashi 0:8fdf9a60065b 137 }
kadonotakashi 0:8fdf9a60065b 138
kadonotakashi 0:8fdf9a60065b 139 ret = flash_device.program(data, address, prog_size);
kadonotakashi 0:8fdf9a60065b 140 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 141
kadonotakashi 0:8fdf9a60065b 142 uint8_t *data_flashed = new uint8_t[aligned_prog_size];
kadonotakashi 0:8fdf9a60065b 143 ret = flash_device.read(data_flashed, address, aligned_prog_size);
kadonotakashi 0:8fdf9a60065b 144 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 145 TEST_ASSERT_EQUAL_UINT8_ARRAY(data, data_flashed, aligned_prog_size);
kadonotakashi 0:8fdf9a60065b 146
kadonotakashi 0:8fdf9a60065b 147 delete[] data;
kadonotakashi 0:8fdf9a60065b 148 delete[] data_flashed;
kadonotakashi 0:8fdf9a60065b 149
kadonotakashi 0:8fdf9a60065b 150 ret = flash_device.deinit();
kadonotakashi 0:8fdf9a60065b 151 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 152 }
kadonotakashi 0:8fdf9a60065b 153
kadonotakashi 0:8fdf9a60065b 154 void flashiap_program_error_test()
kadonotakashi 0:8fdf9a60065b 155 {
kadonotakashi 0:8fdf9a60065b 156 FlashIAP flash_device;
kadonotakashi 0:8fdf9a60065b 157 uint32_t ret = flash_device.init();
kadonotakashi 0:8fdf9a60065b 158 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 159
kadonotakashi 0:8fdf9a60065b 160 // get the last sector size (flash size - 1)
kadonotakashi 0:8fdf9a60065b 161 uint32_t sector_size = flash_device.get_sector_size(flash_device.get_flash_start() + flash_device.get_flash_size() - 1UL);
kadonotakashi 0:8fdf9a60065b 162 uint32_t page_size = flash_device.get_page_size();
kadonotakashi 0:8fdf9a60065b 163 TEST_ASSERT_NOT_EQUAL(0, sector_size);
kadonotakashi 0:8fdf9a60065b 164 TEST_ASSERT_NOT_EQUAL(0, page_size);
kadonotakashi 0:8fdf9a60065b 165 TEST_ASSERT_TRUE(sector_size % page_size == 0);
kadonotakashi 0:8fdf9a60065b 166 const uint8_t test_value = 0xCE;
kadonotakashi 0:8fdf9a60065b 167 uint8_t *data = new uint8_t[page_size];
kadonotakashi 0:8fdf9a60065b 168 for (uint32_t i = 0; i < page_size; i++) {
kadonotakashi 0:8fdf9a60065b 169 data[i] = test_value;
kadonotakashi 0:8fdf9a60065b 170 }
kadonotakashi 0:8fdf9a60065b 171
kadonotakashi 0:8fdf9a60065b 172 // the one before the last page in the system
kadonotakashi 0:8fdf9a60065b 173 uint32_t address = (flash_device.get_flash_start() + flash_device.get_flash_size()) - (sector_size);
kadonotakashi 0:8fdf9a60065b 174 TEST_ASSERT_TRUE(address != 0UL);
kadonotakashi 0:8fdf9a60065b 175
kadonotakashi 0:8fdf9a60065b 176 // unaligned address
kadonotakashi 0:8fdf9a60065b 177 TEST_SKIP_UNLESS_MESSAGE(address >= FLASHIAP_ROM_END, "Test skipped. Test region overlaps code.");
kadonotakashi 0:8fdf9a60065b 178 ret = flash_device.erase(address + 1, sector_size);
kadonotakashi 0:8fdf9a60065b 179 TEST_ASSERT_EQUAL_INT32(-1, ret);
kadonotakashi 0:8fdf9a60065b 180 if (flash_device.get_page_size() > 1) {
kadonotakashi 0:8fdf9a60065b 181 ret = flash_device.program(data, address + 1, page_size);
kadonotakashi 0:8fdf9a60065b 182 TEST_ASSERT_EQUAL_INT32(-1, ret);
kadonotakashi 0:8fdf9a60065b 183 }
kadonotakashi 0:8fdf9a60065b 184
kadonotakashi 0:8fdf9a60065b 185 delete[] data;
kadonotakashi 0:8fdf9a60065b 186
kadonotakashi 0:8fdf9a60065b 187 ret = flash_device.deinit();
kadonotakashi 0:8fdf9a60065b 188 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 189 }
kadonotakashi 0:8fdf9a60065b 190
kadonotakashi 0:8fdf9a60065b 191 void flashiap_timing_test()
kadonotakashi 0:8fdf9a60065b 192 {
kadonotakashi 0:8fdf9a60065b 193 FlashIAP flash_device;
kadonotakashi 0:8fdf9a60065b 194 uint32_t ret = flash_device.init();
kadonotakashi 0:8fdf9a60065b 195 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 196 mbed::Timer timer;
kadonotakashi 0:8fdf9a60065b 197 unsigned int num_write_sizes;
kadonotakashi 0:8fdf9a60065b 198 unsigned int curr_time, byte_usec_ratio;
kadonotakashi 0:8fdf9a60065b 199 unsigned int avg_erase_time = 0;
kadonotakashi 0:8fdf9a60065b 200 unsigned int max_erase_time = 0, min_erase_time = (unsigned int) -1;
kadonotakashi 0:8fdf9a60065b 201 const unsigned int max_writes = 128;
kadonotakashi 0:8fdf9a60065b 202 const unsigned int max_write_sizes = 6;
kadonotakashi 0:8fdf9a60065b 203 const unsigned int max_byte_usec_ratio = 200;
kadonotakashi 0:8fdf9a60065b 204
kadonotakashi 0:8fdf9a60065b 205 uint32_t page_size = flash_device.get_page_size();
kadonotakashi 0:8fdf9a60065b 206 uint32_t write_size = page_size;
kadonotakashi 0:8fdf9a60065b 207
kadonotakashi 0:8fdf9a60065b 208 uint32_t end_address = flash_device.get_flash_start() + flash_device.get_flash_size();
kadonotakashi 0:8fdf9a60065b 209
kadonotakashi 0:8fdf9a60065b 210 utest_printf("\nFlash timing:\n");
kadonotakashi 0:8fdf9a60065b 211 uint32_t sector_size = flash_device.get_sector_size(end_address - 1UL);
kadonotakashi 0:8fdf9a60065b 212 uint32_t base_address = end_address - sector_size;
kadonotakashi 0:8fdf9a60065b 213 timer.start();
kadonotakashi 0:8fdf9a60065b 214 for (num_write_sizes = 0; num_write_sizes < max_write_sizes; num_write_sizes++) {
kadonotakashi 0:8fdf9a60065b 215 if (write_size > sector_size) {
kadonotakashi 0:8fdf9a60065b 216 break;
kadonotakashi 0:8fdf9a60065b 217 }
kadonotakashi 0:8fdf9a60065b 218 uint8_t *buf = new (std::nothrow) uint8_t[write_size];
kadonotakashi 0:8fdf9a60065b 219 if (!buf) {
kadonotakashi 0:8fdf9a60065b 220 // Don't fail the test on lack of heap memory for the buffer
kadonotakashi 0:8fdf9a60065b 221 break;
kadonotakashi 0:8fdf9a60065b 222 }
kadonotakashi 0:8fdf9a60065b 223 memset(buf, 0x5A, write_size);
kadonotakashi 0:8fdf9a60065b 224 timer.reset();
kadonotakashi 0:8fdf9a60065b 225 ret = flash_device.erase(base_address, sector_size);
kadonotakashi 0:8fdf9a60065b 226 curr_time = timer.read_us();
kadonotakashi 0:8fdf9a60065b 227 avg_erase_time += curr_time;
kadonotakashi 0:8fdf9a60065b 228 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 229 max_erase_time = std::max(max_erase_time, curr_time);
kadonotakashi 0:8fdf9a60065b 230 min_erase_time = std::min(min_erase_time, curr_time);
kadonotakashi 0:8fdf9a60065b 231 uint32_t address = base_address;
kadonotakashi 0:8fdf9a60065b 232 unsigned int avg_write_time = 0;
kadonotakashi 0:8fdf9a60065b 233 unsigned int max_write_time = 0, min_write_time = (unsigned int) -1;
kadonotakashi 0:8fdf9a60065b 234 unsigned int num_writes;
kadonotakashi 0:8fdf9a60065b 235 for (num_writes = 0; num_writes < max_writes; num_writes++) {
kadonotakashi 0:8fdf9a60065b 236 if ((address + write_size) > end_address) {
kadonotakashi 0:8fdf9a60065b 237 break;
kadonotakashi 0:8fdf9a60065b 238 }
kadonotakashi 0:8fdf9a60065b 239 timer.reset();
kadonotakashi 0:8fdf9a60065b 240 ret = flash_device.program(buf, address, write_size);
kadonotakashi 0:8fdf9a60065b 241 curr_time = timer.read_us();
kadonotakashi 0:8fdf9a60065b 242 avg_write_time += curr_time;
kadonotakashi 0:8fdf9a60065b 243 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 244 max_write_time = std::max(max_write_time, curr_time);
kadonotakashi 0:8fdf9a60065b 245 min_write_time = std::min(min_write_time, curr_time);
kadonotakashi 0:8fdf9a60065b 246 address += write_size;
kadonotakashi 0:8fdf9a60065b 247 }
kadonotakashi 0:8fdf9a60065b 248 delete[] buf;
kadonotakashi 0:8fdf9a60065b 249 avg_write_time /= num_writes;
kadonotakashi 0:8fdf9a60065b 250 utest_printf("Write size %6u bytes: avg %10u, min %10u, max %10u (usec)\n",
kadonotakashi 0:8fdf9a60065b 251 write_size, avg_write_time, min_write_time, max_write_time);
kadonotakashi 0:8fdf9a60065b 252 byte_usec_ratio = write_size / avg_write_time;
kadonotakashi 0:8fdf9a60065b 253 TEST_ASSERT(byte_usec_ratio < max_byte_usec_ratio);
kadonotakashi 0:8fdf9a60065b 254 write_size *= 4;
kadonotakashi 0:8fdf9a60065b 255 }
kadonotakashi 0:8fdf9a60065b 256
kadonotakashi 0:8fdf9a60065b 257 if (num_write_sizes) {
kadonotakashi 0:8fdf9a60065b 258 avg_erase_time /= num_write_sizes;
kadonotakashi 0:8fdf9a60065b 259 utest_printf("\nErase size %6u bytes: avg %10u, min %10u, max %10u (usec)\n\n",
kadonotakashi 0:8fdf9a60065b 260 sector_size, avg_erase_time, min_erase_time, max_erase_time);
kadonotakashi 0:8fdf9a60065b 261 byte_usec_ratio = sector_size / avg_erase_time;
kadonotakashi 0:8fdf9a60065b 262 TEST_ASSERT(byte_usec_ratio < max_byte_usec_ratio);
kadonotakashi 0:8fdf9a60065b 263 }
kadonotakashi 0:8fdf9a60065b 264
kadonotakashi 0:8fdf9a60065b 265 ret = flash_device.deinit();
kadonotakashi 0:8fdf9a60065b 266 TEST_ASSERT_EQUAL_INT32(0, ret);
kadonotakashi 0:8fdf9a60065b 267 }
kadonotakashi 0:8fdf9a60065b 268
kadonotakashi 0:8fdf9a60065b 269
kadonotakashi 0:8fdf9a60065b 270 Case cases[] = {
kadonotakashi 0:8fdf9a60065b 271 Case("FlashIAP - init", flashiap_init_test),
kadonotakashi 0:8fdf9a60065b 272 Case("FlashIAP - program", flashiap_program_test),
kadonotakashi 0:8fdf9a60065b 273 Case("FlashIAP - program across sectors", flashiap_cross_sector_program_test),
kadonotakashi 0:8fdf9a60065b 274 Case("FlashIAP - program errors", flashiap_program_error_test),
kadonotakashi 0:8fdf9a60065b 275 Case("FlashIAP - timing", flashiap_timing_test),
kadonotakashi 0:8fdf9a60065b 276 };
kadonotakashi 0:8fdf9a60065b 277
kadonotakashi 0:8fdf9a60065b 278 utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
kadonotakashi 0:8fdf9a60065b 279 {
kadonotakashi 0:8fdf9a60065b 280 GREENTEA_SETUP(120, "default_auto");
kadonotakashi 0:8fdf9a60065b 281 return greentea_test_setup_handler(number_of_cases);
kadonotakashi 0:8fdf9a60065b 282 }
kadonotakashi 0:8fdf9a60065b 283
kadonotakashi 0:8fdf9a60065b 284 Specification specification(greentea_test_setup, cases, greentea_test_teardown_handler);
kadonotakashi 0:8fdf9a60065b 285
kadonotakashi 0:8fdf9a60065b 286 int main()
kadonotakashi 0:8fdf9a60065b 287 {
kadonotakashi 0:8fdf9a60065b 288 Harness::run(specification);
kadonotakashi 0:8fdf9a60065b 289 }