2222#include " utest/utest.h"
2323#include " unity/unity.h"
2424#include " greentea-client/test_env.h"
25+ #include < algorithm>
2526
2627#include " mbed.h"
2728
@@ -48,10 +49,10 @@ void flashiap_program_test()
4849 TEST_ASSERT_NOT_EQUAL (0 , sector_size);
4950 TEST_ASSERT_NOT_EQUAL (0 , page_size);
5051 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 ;
5556 }
5657
5758 // the one before the last sector in the system
@@ -61,19 +62,29 @@ void flashiap_program_test()
6162 TEST_ASSERT_EQUAL_INT32 (0 , ret);
6263
6364
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 );
6768 TEST_ASSERT_EQUAL_INT32 (0 , ret);
6869 }
6970
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 );
7475 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 );
7677 }
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+
7788 delete[] data;
7889 delete[] data_flashed;
7990
0 commit comments