MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / w25q_write_data

Function w25q_write_data

bsp/hc32/tests/test_qspi.c:371–428  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

369
370
371int32_t w25q_write_data(struct rt_qspi_device *device, uint32_t u32Addr, uint8_t *pu8WriteBuf, uint32_t u32Size)
372{
373 int32_t i32Ret = LL_OK;
374 uint32_t u32TempSize, u32AddrOffset = 0U;
375 uint8_t w25q_txBuf[W25Q_PAGE_SIZE + 10];
376
377 if ((u32Addr % W25Q_PAGE_SIZE) != 0U)
378 {
379 return LL_ERR_INVD_PARAM;
380 }
381 while (u32Size != 0UL)
382 {
383 if (u32Size >= W25Q_PAGE_SIZE)
384 {
385 u32TempSize = W25Q_PAGE_SIZE;
386 }
387 else
388 {
389 u32TempSize = u32Size;
390 }
391
392 w25q_txBuf[0] = W25Q_WR_ENABLE;
393 if (1 != rt_qspi_send(device, w25q_txBuf, 1))
394 {
395 rt_kprintf("qspi send cmd failed!\n");
396 }
397 w25q_txBuf[0] = W25Q_QSPI_WR_CMD;
398 w25q_txBuf[1] = (u32Addr >> 16) & 0xFFU;
399 w25q_txBuf[2] = (u32Addr >> 8) & 0xFFU;
400 w25q_txBuf[3] = u32Addr & 0xFFU;
401 rt_memcpy(&w25q_txBuf[4], &pu8WriteBuf[u32AddrOffset], u32TempSize);
402 if (W25Q64_QUAD_INPUT_PAGE_PROGRAM == w25q_txBuf[0])
403 {
404 if ((u32TempSize + 4) != bsp_qspi_send(device, w25q_txBuf, u32TempSize + 4, 4))
405 {
406 rt_kprintf("qspi send addr failed!\n");
407 }
408 }
409 else
410 {
411 if ((u32TempSize + 4) != bsp_qspi_send(device, w25q_txBuf, u32TempSize + 4, 1))
412 {
413 rt_kprintf("qspi send addr failed!\n");
414 }
415 }
416 i32Ret = w25q_check_process_done(device, 500U);
417 if (i32Ret != LL_OK)
418 {
419 break;
420 }
421
422 u32Addr += u32TempSize;
423 u32AddrOffset += u32TempSize;
424 u32Size -= u32TempSize;
425 }
426
427 return i32Ret;
428}

Callers 1

w25q_write_read_dataFunction · 0.70

Calls 5

rt_qspi_sendFunction · 0.85
rt_kprintfFunction · 0.85
rt_memcpyFunction · 0.85
bsp_qspi_sendFunction · 0.85
w25q_check_process_doneFunction · 0.70

Tested by

no test coverage detected