ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_sdmmc_spi.h
Go to the documentation of this file.
1
50
51#pragma once
52
53#ifdef __cplusplus
54extern "C" {
55#endif
56
57#include <stdint.h>
58
59#include "ra8_err.h"
60#include "ra8_fs.h"
61#include "ra8_port_constants.h"
62
63/* =============================================================================
64 * Compile-time limits and protocol constants
65 * =============================================================================
66 */
67
77
93
104
105/* =============================================================================
106 * Transport descriptor (Dependency Inversion seam)
107 * =============================================================================
108 */
109
122typedef ra8_err_t (*ra8_sdmmc_spi_set_clock_fn_t)(void* ctx, uint32_t hz);
123
135typedef ra8_err_t (*ra8_sdmmc_spi_cs_fn_t)(void* ctx, bool asserted);
136
151 const uint8_t* tx,
152 uint8_t* rx,
153 uint32_t len);
154
171
172/* =============================================================================
173 * Convenience SCI Simple-SPI transport factory (EK-RA8D2 Pmod)
174 * =============================================================================
175 */
176
199
268[[nodiscard]] ra8_err_t ra8_sdmmc_spi_transport_sci(uint8_t sci_channel,
269 uint32_t pclk_hz,
270 const ra8_sdmmc_spi_sci_pins_t* pins,
272
273/* =============================================================================
274 * Lifecycle
275 * =============================================================================
276 */
277
319[[nodiscard]] ra8_err_t ra8_sdmmc_spi_init(const ra8_sdmmc_spi_transport_t* transport);
320
333[[nodiscard]] ra8_err_t ra8_sdmmc_spi_deinit(void);
334
335/* =============================================================================
336 * Block I/O
337 * =============================================================================
338 */
339
369[[nodiscard]] ra8_err_t ra8_sdmmc_spi_read_block(uint32_t lba, uint8_t* buf);
370
412[[nodiscard]] ra8_err_t ra8_sdmmc_spi_read_blocks(uint32_t lba, uint8_t* buf, uint32_t count);
413
441[[nodiscard]] ra8_err_t ra8_sdmmc_spi_write_block(uint32_t lba, const uint8_t* buf);
442
472[[nodiscard]] ra8_err_t
473ra8_sdmmc_spi_write_blocks(uint32_t lba, const uint8_t* buf, uint32_t count);
474
514[[nodiscard]] ra8_err_t ra8_sdmmc_spi_erase_blocks(uint32_t lba, uint32_t count);
515
516/* =============================================================================
517 * Status queries
518 * =============================================================================
519 */
520
538[[nodiscard]] ra8_err_t ra8_sdmmc_spi_get_capacity(uint32_t* out_blocks);
539
557
558/* =============================================================================
559 * ra8_fs backend adapter
560 * =============================================================================
561 */
562
597
598/* =============================================================================
599 * Test-only helpers (CRC primitives)
600 * =============================================================================
601 */
602
626uint8_t ra8_sdmmc_spi_crc7(const uint8_t* data, uint32_t len);
627
649uint16_t ra8_sdmmc_spi_crc16(const uint8_t* data, uint32_t len);
650
651#ifdef __cplusplus
652}
653#endif
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
Minimal FAT12/FAT16/FAT32 filesystem adapter (read + write).
Typed Port / Pin Constants for the RA8D2 IOPORT Module.
ra8_port_pin_t
Packed (port << 8) | pin pin identifier.
ra8_err_t ra8_sdmmc_spi_transport_sci(uint8_t sci_channel, uint32_t pclk_hz, const ra8_sdmmc_spi_sci_pins_t *pins, ra8_sdmmc_spi_transport_t *out)
Build the standard EK-RA8D2 SCI Simple-SPI transport for an SD card.
ra8_sdmmc_spi_limits_t
Block-I/O size constants.
@ k_ra8_sdmmc_spi_block_size
512-byte block (SD spec PHY v9 section 7.2.2).
@ k_ra8_sdmmc_spi_csd_response_len
CMD9 CSD register payload bytes.
@ k_ra8_sdmmc_spi_cmd_frame_bytes
1 cmd-byte + 4 arg-bytes + 1 CRC-byte.
ra8_sdmmc_spi_clock_t
Canonical SPI clock rates used by ra8_sdmmc_spi_init.
@ k_ra8_sdmmc_spi_clock_data_hz
Default-speed data clock.
@ k_ra8_sdmmc_spi_clock_init_hz
Mandatory init clock floor.
uint8_t ra8_sdmmc_spi_crc7(const uint8_t *data, uint32_t len)
Compute the SD-spec CRC7 over an arbitrary byte run.
ra8_err_t(* ra8_sdmmc_spi_xfer_fn_t)(void *ctx, const uint8_t *tx, uint8_t *rx, uint32_t len)
Exchange len bytes full-duplex on the SPI bus.
ra8_err_t ra8_sdmmc_spi_read_blocks(uint32_t lba, uint8_t *buf, uint32_t count)
Read count contiguous 512-byte blocks in one CMD18 transaction.
ra8_err_t ra8_sdmmc_spi_erase_blocks(uint32_t lba, uint32_t count)
Bulk-erase count blocks at lba, guaranteeing a zero read-back.
ra8_err_t ra8_sdmmc_spi_write_block(uint32_t lba, const uint8_t *buf)
Write one 512-byte block at logical block address lba.
ra8_err_t ra8_sdmmc_spi_read_block(uint32_t lba, uint8_t *buf)
Read one 512-byte block at logical block address lba.
ra8_err_t(* ra8_sdmmc_spi_cs_fn_t)(void *ctx, bool asserted)
Drive the chip-select line of the SD card.
ra8_err_t ra8_sdmmc_spi_get_capacity(uint32_t *out_blocks)
Return the card capacity in 512-byte blocks.
ra8_err_t ra8_sdmmc_spi_init(const ra8_sdmmc_spi_transport_t *transport)
Run the SD SPI-mode identification sequence on a card.
ra8_err_t(* ra8_sdmmc_spi_set_clock_fn_t)(void *ctx, uint32_t hz)
Set the SPI clock frequency.
ra8_err_t ra8_sdmmc_spi_write_blocks(uint32_t lba, const uint8_t *buf, uint32_t count)
Write count contiguous 512-byte blocks in one CMD25 transaction.
ra8_err_t ra8_sdmmc_spi_deinit(void)
Tear down the driver and release the transport binding.
ra8_err_t ra8_sdmmc_spi_get_card_type(ra8_sdmmc_spi_card_type_t *out_type)
Return the detected card type.
uint16_t ra8_sdmmc_spi_crc16(const uint8_t *data, uint32_t len)
Compute the SD-spec CRC16-CCITT over an arbitrary byte run.
ra8_sdmmc_spi_card_type_t
Detected SD card capacity / addressing class.
@ k_ra8_sdmmc_spi_type_sdhc
SDHC / SDXC v2.x (block-addressed).
@ k_ra8_sdmmc_spi_type_sdv2
SD v2.x SC (byte-addressed).
@ k_ra8_sdmmc_spi_type_unknown
Not yet probed / probe failed.
@ k_ra8_sdmmc_spi_type_sdv1
SD v1.x (byte-addressed).
ra8_err_t ra8_sdmmc_spi_bind_fs_backend(ra8_fs_backend_t *out_backend)
Populate an ra8_fs_backend_t that mounts onto this SD driver.
Block-device interface that ra8_fs runs on top of.
The four bus pins of an SCI Simple-SPI SD slot.
ra8_port_pin_t copi
Controller-Out / Peripheral-In pin (COPIn).
ra8_port_pin_t sck
SPI clock pin (routed to SCKn).
ra8_port_pin_t cipo
Controller-In / Peripheral-Out pin (CIPOn).
ra8_port_pin_t cs
Chip-select pin, driven as a GPIO output.
Driver-to-bus binding (Dependency Inversion seam).
void * ctx
Caller context.
ra8_sdmmc_spi_set_clock_fn_t set_clock
Set the bus clock.
ra8_sdmmc_spi_xfer_fn_t xfer
Exchange bytes.
ra8_sdmmc_spi_cs_fn_t cs
Drive chip select.