| 376 | } |
| 377 | |
| 378 | static 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 | } |
no test coverage detected