I am trying to modify the nrf_block_dev_qspi.c to work with S25FS256 flash part in our project. However, i am facing issues. When trying to understand the code I see some things that I don't quite understand.
#define BD_ERASE_UNIT_INVALID_ID 0xFFFFFFFF /**< Invalid erase unit number*/ // p_work->erase_unit_idx is initialized to BD_ERASE_UNIT_INVALID_ID in init function // This means p_work->erase_unit_idx = -1 uint32_t block_to_program = __CLZ(__RBIT(p_work->erase_unit_dirty_blocks)); uint32_t dst_address = (p_work->erase_unit_idx * NRF_BLOCK_DEV_QSPI_ERASE_UNIT_SIZE) + (block_to_program * p_work->geometry.blk_size); const void * p_src_address = p_work->p_erase_unit_buff + block_to_program * p_work->geometry.blk_size;
In the above snippet of code, "p_work->erase_unit_dirty_blocks" is initially 0. This results in "block_to_program" being 32. Is this a valid block number? It seems like with a block size of 512, and an erase unit size of 4096, results in 8 blocks only. So block_to_program being 32 is suspicious.
Moreover, the "p_work->erase_unit_idx" is initialized with -1. This results in the "dst_address" being = (-1 * 4096) + (32 * 512). What is the logic here to start with -1.
Another point is, "p_src_address" = p_work->p_erase_unit_buff + (32 * 512 = 16384). The buffer is only allocated with 4096 bytes in the structure. Not sure if this is a bug or some other logic explains this.
Could anyone answer these questions, as it is critical to our project in understanding this code and modifying as necessary for our project.