44
44
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
45
45
//--------------------------------------------------------------------+
46
46
static SemaphoreHandle_t _sem = NULL ;
47
- static volatile uint32_t _op_result ;
48
47
49
48
void flash_nrf5x_event_cb (uint32_t event )
50
49
{
51
- _op_result = event ;
52
- xSemaphoreGive (_sem );
50
+ // if (event != NRF_EVT_FLASH_OPERATION_SUCCESS) LOG_LV1("IFLASH", "Flash op Failed") ;
51
+ if ( _sem ) xSemaphoreGive (_sem );
53
52
}
54
53
55
54
// Flash Abstraction Layer
@@ -101,52 +100,46 @@ bool flash_nrf5x_erase(uint32_t addr)
101
100
bool fal_erase (uint32_t addr )
102
101
{
103
102
// Init semaphore for first call
104
- if ( ! _sem )
103
+ if ( _sem == NULL )
105
104
{
106
- _sem = xSemaphoreCreateBinary ( );
105
+ _sem = xSemaphoreCreateCounting ( 10 , 0 );
107
106
VERIFY (_sem );
108
107
}
109
108
110
- // delay and retry if busy
109
+ // retry if busy
111
110
uint32_t err ;
112
111
while ( NRF_ERROR_BUSY == (err = sd_flash_page_erase (addr / FLASH_NRF52_PAGE_SIZE )) )
113
112
{
114
113
delay (1 );
115
114
}
116
- VERIFY_STATUS (err );
115
+ VERIFY_STATUS (err , false );
117
116
118
117
// wait for async event if SD is enabled
119
118
uint8_t sd_en = 0 ;
120
119
(void ) sd_softdevice_is_enabled (& sd_en );
121
120
122
- if ( sd_en )
123
- {
124
- xSemaphoreTake (_sem , portMAX_DELAY );
125
- VERIFY (_op_result == NRF_EVT_FLASH_OPERATION_SUCCESS );
126
- }
127
-
121
+ if ( sd_en ) xSemaphoreTake (_sem , portMAX_DELAY );
122
+
128
123
return true;
129
124
}
130
125
131
126
static uint32_t fal_program (uint32_t dst , void const * src , uint32_t len )
132
127
{
133
- // delay and try again if busy
128
+ cprintf ("Programming 0x%08X\n" , dst );
129
+
130
+ // try again if busy
134
131
uint32_t err ;
135
132
while ( NRF_ERROR_BUSY == (err = sd_flash_write ((uint32_t * ) dst , (uint32_t const * ) src , len / 4 )) )
136
133
{
137
134
delay (1 );
138
135
}
139
- VERIFY_STATUS (err );
136
+ VERIFY_STATUS (err , 0 );
140
137
141
138
// wait for async event if SD is enabled
142
139
uint8_t sd_en = 0 ;
143
140
(void ) sd_softdevice_is_enabled (& sd_en );
144
141
145
- if ( sd_en )
146
- {
147
- xSemaphoreTake (_sem , portMAX_DELAY );
148
- VERIFY (_op_result == NRF_EVT_FLASH_OPERATION_SUCCESS );
149
- }
142
+ if ( sd_en ) xSemaphoreTake (_sem , portMAX_DELAY );
150
143
151
144
return len ;
152
145
}
@@ -161,5 +154,3 @@ static bool fal_verify (uint32_t addr, void const * buf, uint32_t len)
161
154
{
162
155
return 0 == memcmp ((void * ) addr , buf , len );
163
156
}
164
-
165
-
0 commit comments