ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
usb_selftest_microsd_console.c
Go to the documentation of this file.
1
24
25#include <stddef.h>
26#include <stdint.h>
27
28#include "ra8_board_ek_ra8d2.h"
29#include "ra8_err.h"
31
32#ifndef RA8_OFF_TARGET
33
34/* -------------------------------------------------------------------------- */
35/* Console helpers (SCI8 -> J-Link OB CDC) */
36/* -------------------------------------------------------------------------- */
37
56static uint8_t microsd_nibble_to_hex(uint32_t nibble)
57{
58 if (nibble < k_microsd_hex_digit_split) {
59 return (uint8_t)((uint8_t)'0' + (uint8_t)nibble);
60 }
61 return (uint8_t)((uint8_t)'A' + (uint8_t)nibble - (uint8_t)k_microsd_hex_digit_split);
62}
63
82static uint32_t microsd_str_len(const char* text)
83{
84 uint32_t len = 0U;
85 while (len < (uint32_t)k_microsd_print_cap) {
86 if (text[len] == '\0') {
87 break;
88 }
89 len++;
90 }
91 return len;
92}
93
114[[nodiscard]] static ra8_err_t microsd_sci_write(const uint8_t* data, uint32_t len)
115{
116 return ra8_board_uart_console_write(data, (size_t)len);
117}
118
119[[nodiscard]] ra8_err_t microsd_print(const char* text)
120{
121 return microsd_sci_write((const uint8_t*)text, microsd_str_len(text));
122}
123
125[[nodiscard]] ra8_err_t microsd_print_dec(uint32_t value)
126{
127 uint8_t scratch[k_microsd_dec_chars_u32] = {};
128 uint8_t out[k_microsd_dec_chars_u32] = {};
129 uint8_t count = 0U;
130 uint32_t v = value;
131 if (v == 0U) {
132 out[0] = (uint8_t)'0';
133 return microsd_sci_write(out, 1U);
134 }
135 while (v != 0U) {
136 if (count >= (uint8_t)k_microsd_dec_chars_u32) {
137 break;
138 }
139 scratch[count] = (uint8_t)((uint8_t)'0' + (uint8_t)(v % k_microsd_dec_radix));
140 v = v / k_microsd_dec_radix;
141 count++;
142 }
143 for (uint8_t i = 0U; i < count; i++) {
144 out[i] = scratch[count - 1U - i];
145 }
146 return microsd_sci_write(out, (uint32_t)count);
147}
148
150[[nodiscard]] ra8_err_t microsd_print_hex(uint32_t value, uint8_t digits)
151{
152 uint8_t out[k_microsd_hex_chars_u32] = {};
153 uint8_t width = digits;
154 if (width > (uint8_t)k_microsd_hex_chars_u32) {
155 width = (uint8_t)k_microsd_hex_chars_u32;
156 }
157 for (uint8_t i = 0U; i < width; i++) {
158 const uint8_t shift = (uint8_t)((width - 1U - i) * k_microsd_nibble_bits);
159 out[i] = microsd_nibble_to_hex((value >> shift) & k_microsd_nibble_mask);
160 }
161 return microsd_sci_write(out, (uint32_t)width);
162}
163
164[[nodiscard]] ra8_err_t microsd_print_fail(const char* what, ra8_err_t err)
165{
166 ra8_err_t e = microsd_print("ra8d2 microsd: FAIL ");
167 if (e != k_ra8_ok) {
168 return e;
169 }
170 e = microsd_print(what);
171 if (e != k_ra8_ok) {
172 return e;
173 }
174 e = microsd_print(" err=0x");
175 if (e != k_ra8_ok) {
176 return e;
177 }
178 e = microsd_print_hex((uint32_t)err, (uint8_t)k_microsd_hex_chars_u32);
179 if (e != k_ra8_ok) {
180 return e;
181 }
182 return microsd_print("\r\n");
183}
184
185#endif /* !RA8_OFF_TARGET */
Board-support layer for the Renesas EK-RA8D2 v1 evaluation kit.
ra8_err_t ra8_board_uart_console_write(const uint8_t *data, size_t len)
Polled blocking write to the J-Link OB VCOM console.
Error Code Definitions for ra8-firmware.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
Definition ra8_err.h:119
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
ra8_err_t microsd_print_fail(const char *what, ra8_err_t err)
Print "FAIL <what> err=0xNNNNNNNN" on its own console line.
ra8_err_t microsd_print_dec(uint32_t value)
Implementation of microsd_print_dec() – digit-reversal scratch.
static uint8_t microsd_nibble_to_hex(uint32_t nibble)
Format one nibble (0..15) into an uppercase hex character.
ra8_err_t microsd_print(const char *text)
Print a NUL-terminated ASCII string over the SCI8 console.
ra8_err_t microsd_print_hex(uint32_t value, uint8_t digits)
Implementation of microsd_print_hex() – width clamped to 8.
static uint32_t microsd_str_len(const char *text)
Bounded ASCII string length (cap k_microsd_print_cap).
static ra8_err_t microsd_sci_write(const uint8_t *data, uint32_t len)
Push a literal block over the J-Link OB CDC console polled.
examples/ek_ra8d2/hw_validated/hil/usb_selftest_microsd/inc/usb_selftest_microsd_steps....
@ k_microsd_dec_radix
Base for decimal conversion.
@ k_microsd_nibble_mask
4-bit nibble mask.
@ k_microsd_hex_chars_u32
32-bit value -> "ABCDEF01".
@ k_microsd_hex_digit_split
Threshold between '0-9'/'A-F'.
@ k_microsd_dec_chars_u32
Max digits for a 32-bit count.
@ k_microsd_nibble_bits
Bits per hex nibble.
@ k_microsd_print_cap
Bound for console-string scans.