22
22
#include " utest/utest.h"
23
23
#include " unity/unity.h"
24
24
#include " greentea-client/test_env.h"
25
+ #include < algorithm>
25
26
26
27
#include " mbed.h"
27
28
@@ -48,10 +49,10 @@ void flashiap_program_test()
48
49
TEST_ASSERT_NOT_EQUAL (0 , sector_size);
49
50
TEST_ASSERT_NOT_EQUAL (0 , page_size);
50
51
TEST_ASSERT_TRUE (sector_size % page_size == 0 );
51
- const uint8_t test_value = 0xCE ;
52
- uint8_t *data = new uint8_t [page_size ];
53
- for (uint32_t i = 0 ; i < page_size ; i++) {
54
- data[i] = test_value ;
52
+ uint32_t prog_size = std::max (page_size, ( uint32_t ) 8 ) ;
53
+ uint8_t *data = new uint8_t [prog_size + 2 ];
54
+ for (uint32_t i = 0 ; i < prog_size + 2 ; i++) {
55
+ data[i] = i ;
55
56
}
56
57
57
58
// the one before the last sector in the system
@@ -61,19 +62,29 @@ void flashiap_program_test()
61
62
TEST_ASSERT_EQUAL_INT32 (0 , ret);
62
63
63
64
64
- for (uint32_t i = 0 ; i < sector_size / page_size ; i++) {
65
- uint32_t page_addr = address + i * page_size ;
66
- ret = flash_device.program (data, page_addr, page_size );
65
+ for (uint32_t i = 0 ; i < sector_size / prog_size ; i++) {
66
+ uint32_t prog_addr = address + i * prog_size ;
67
+ ret = flash_device.program (data, prog_addr, prog_size );
67
68
TEST_ASSERT_EQUAL_INT32 (0 , ret);
68
69
}
69
70
70
- uint8_t *data_flashed = new uint8_t [page_size ];
71
- for (uint32_t i = 0 ; i < sector_size / page_size ; i++) {
72
- uint32_t page_addr = address + i * page_size ;
73
- ret = flash_device.read (data_flashed, page_addr, page_size );
71
+ uint8_t *data_flashed = new uint8_t [prog_size ];
72
+ for (uint32_t i = 0 ; i < sector_size / prog_size ; i++) {
73
+ uint32_t page_addr = address + i * prog_size ;
74
+ ret = flash_device.read (data_flashed, page_addr, prog_size );
74
75
TEST_ASSERT_EQUAL_INT32 (0 , ret);
75
- TEST_ASSERT_EQUAL_UINT8_ARRAY (data, data_flashed, page_size );
76
+ TEST_ASSERT_EQUAL_UINT8_ARRAY (data, data_flashed, prog_size );
76
77
}
78
+
79
+ // check programming of unaligned buffer and size
80
+ ret = flash_device.erase (address, sector_size);
81
+ TEST_ASSERT_EQUAL_INT32 (0 , ret);
82
+ ret = flash_device.program (data + 2 , address, prog_size);
83
+ TEST_ASSERT_EQUAL_INT32 (0 , ret);
84
+ ret = flash_device.read (data_flashed, address, prog_size - 1 );
85
+ TEST_ASSERT_EQUAL_INT32 (0 , ret);
86
+ TEST_ASSERT_EQUAL_UINT8_ARRAY (data + 2 , data_flashed, prog_size - 1 );
87
+
77
88
delete[] data;
78
89
delete[] data_flashed;
79
90
0 commit comments