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

Function _write_block

components/drivers/spi/dev_spi_msd.c:378–435  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

376}
377
378static rt_err_t _write_block(struct rt_spi_device *device, const void *buffer, uint32_t block_size, uint8_t token)
379{
380 struct rt_spi_message message;
381 uint8_t send_buffer[16];
382
383 rt_memset(send_buffer, DUMMY, sizeof(send_buffer));
384 send_buffer[sizeof(send_buffer) - 1] = token;
385
386 /* send start block token */
387 {
388 /* initial message */
389 message.send_buf = send_buffer;
390 message.recv_buf = RT_NULL;
391 message.length = sizeof(send_buffer);
392 message.cs_take = message.cs_release = 0;
393
394 /* transfer message */
395 device->bus->ops->xfer(device, &message);
396 }
397
398 /* send data */
399 {
400 /* initial message */
401 message.send_buf = buffer;
402 message.recv_buf = RT_NULL;
403 message.length = block_size;
404 message.cs_take = message.cs_release = 0;
405
406 /* transfer message */
407 device->bus->ops->xfer(device, &message);
408 }
409
410 /* put crc and get data response */
411 {
412 uint8_t recv_buffer[3];
413 uint8_t response;
414
415 /* initial message */
416 message.send_buf = send_buffer;
417 message.recv_buf = recv_buffer;
418 message.length = sizeof(recv_buffer);
419 message.cs_take = message.cs_release = 0;
420
421 /* transfer message */
422 device->bus->ops->xfer(device, &message);
423
424// response = 0x0E & recv_buffer[2];
425 response = MSD_GET_DATA_RESPONSE(recv_buffer[2]);
426 if (response != MSD_DATA_OK)
427 {
428 MSD_DEBUG("[err] write block fail! data response : 0x%02X\r\n", response);
429 return -RT_ERROR;
430 }
431 }
432
433 /* wati ready */
434 return _wait_ready(device);
435}

Callers 2

rt_msd_writeFunction · 0.85
rt_msd_sdhc_writeFunction · 0.85

Calls 2

rt_memsetFunction · 0.85
_wait_readyFunction · 0.85

Tested by

no test coverage detected