ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
c6_probe.h
Go to the documentation of this file.
1
36#pragma once
37
38#include <stdint.h>
39
40#include "c6_proto.h"
41#include "ra8_err.h"
42#include "ra8_spi.h"
43
44/* =============================================================================
45 * 1. Tunables and budgets
46 * =============================================================================
47 */
48
79
116
145
146/* =============================================================================
147 * 2. Side-band pins
148 * =============================================================================
149 */
150
179
194typedef struct {
197
229
256
292
293/* =============================================================================
294 * 3. Module entry points
295 * =============================================================================
296 */
297
318void c6_probe_puts(const char* text);
319
335void c6_probe_put_u32(uint32_t value);
336
353void c6_probe_put_hex(uint32_t value, uint8_t digits);
354
380[[nodiscard]] ra8_err_t c6_probe_sideband_init(void);
381
404
421void c6_probe_print_sideband(const char* label, const c6_sideband_sample_t* s);
422
469void c6_probe_vote(const c6_sideband_sample_t* pre,
470 const c6_sideband_sample_t* mid,
471 const c6_sideband_sample_t* post,
472 c6_probe_stats_t* st);
473
511uint8_t c6_probe_best(const uint32_t* votes, uint8_t ignore, uint32_t min_votes);
512
565
605uint8_t c6_probe_sunk_pin(const c6_probe_stats_t* st, uint8_t ignore);
606
655void c6_probe_resolve_map(const c6_probe_stats_t* st, uint8_t* hs_idx, uint8_t* dr_idx);
656
675const char* c6_probe_sideband_name(uint8_t idx);
676
704c6_wire_kind_t c6_probe_wire_kind(uint8_t after_high, uint8_t after_low);
705
728void c6_probe_wire_test(void);
729
765
795[[nodiscard]] ra8_err_t c6_probe_spi_pins_init(void);
796
825 uint32_t pclka_hz,
827 uint8_t* hs_idx);
c6_sideband_idx_t
Index into the Pmod1 side-band pin table.
Definition c6_probe.h:172
@ k_c6_sb_irq
Pmod1.7 IRQ, P006.
Definition c6_probe.h:173
@ k_c6_sb_reset
Pmod1.8 RESET, P402.
Definition c6_probe.h:174
@ k_c6_sb_gpio_a
Pmod1.9 GPIO, P412.
Definition c6_probe.h:175
@ k_c6_sb_gpio_b
Pmod1.10 GPIO, P413.
Definition c6_probe.h:176
@ k_c6_sb_count
Side-band pin count.
Definition c6_probe.h:177
c6_wire_kind_t c6_probe_wire_kind(uint8_t after_high, uint8_t after_low)
Classify one Pmod1 net from its two drive-and-release samples.
void c6_probe_vote(const c6_sideband_sample_t *pre, const c6_sideband_sample_t *mid, const c6_sideband_sample_t *post, c6_probe_stats_t *st)
Fold one transaction's three samples into the classification votes.
ra8_err_t c6_probe_spi_pins_init(void)
Route the Pmod1 SPI pins to SCI2 and own the chip-select as GPIO.
Definition c6_xfer.c:322
const char * c6_probe_sideband_name(uint8_t idx)
Name a side-band pin for the console.
c6_probe_fmt_t
Radix and field-width constants used by the console formatters.
Definition c6_probe.h:135
@ k_c6_fmt_dec_radix
Base ten.
Definition c6_probe.h:136
@ k_c6_fmt_dec_digits
"4294967295" is ten digits.
Definition c6_probe.h:137
@ k_c6_fmt_hex_byte
Nibbles printed for one byte.
Definition c6_probe.h:142
@ k_c6_fmt_hex_max
A uint32_t is eight nibbles.
Definition c6_probe.h:138
@ k_c6_fmt_hex_bits
Bits per nibble.
Definition c6_probe.h:139
@ k_c6_fmt_hex_word
Nibbles printed for a 16-bit word.
Definition c6_probe.h:143
@ k_c6_fmt_hex_alpha
First nibble printed as a letter.
Definition c6_probe.h:141
@ k_c6_fmt_hex_mask
Nibble mask.
Definition c6_probe.h:140
c6_probe_tunable_t
Timing and clock budgets for the probe.
Definition c6_probe.h:70
@ k_c6_probe_gap_ms
Gap between transactions.
Definition c6_probe.h:75
@ k_c6_probe_uart_baud
Console baud (J-Link OB VCOM).
Definition c6_probe.h:71
@ k_c6_probe_boot_wait_ms
Let the C6 finish booting.
Definition c6_probe.h:73
@ k_c6_probe_settle_ms
Post-transfer side-band settle.
Definition c6_probe.h:74
@ k_c6_probe_idle_ms
Background heartbeat period.
Definition c6_probe.h:77
@ k_c6_probe_sck_hz
Conservative first-light SCK rate.
Definition c6_probe.h:72
@ k_c6_probe_cs_hold_ms
Chip-select setup / hold.
Definition c6_probe.h:76
void c6_probe_puts(const char *text)
Emit a bounded, NUL-terminated ASCII literal on the console.
Definition c6_console.c:25
bool c6_probe_sweep_mode(ra8_spi_mode_t mode, uint32_t pclka_hz, c6_probe_stats_t *st, uint8_t *hs_idx)
Run the transaction burst for one SPI mode.
Definition c6_xfer.c:345
c6_wire_kind_t
What the drive-and-release test says is on the far end of a net.
Definition c6_probe.h:250
@ k_c6_wire_low_side
Snapped to 0: pull-down or driven low.
Definition c6_probe.h:252
@ k_c6_wire_high_side
Snapped to 1: pull-up or driven high.
Definition c6_probe.h:253
@ k_c6_wire_odd
Inverted result: not physically sane.
Definition c6_probe.h:254
@ k_c6_wire_floating
Held both levels: no termination.
Definition c6_probe.h:251
void c6_probe_put_u32(uint32_t value)
Emit an unsigned integer in decimal.
Definition c6_console.c:38
void c6_probe_sample_sideband(c6_sideband_sample_t *out)
Read every Pmod1 side-band pin into one sample.
void c6_probe_print_sideband(const char *label, const c6_sideband_sample_t *s)
Print a labelled side-band sample as label P006=1 P402=0 ....
ra8_err_t c6_probe_pull_contest(c6_probe_stats_t *st)
Find which side-band pins an external driver is holding low.
uint8_t c6_probe_sunk_pin(const c6_probe_stats_t *st, uint8_t ignore)
Name the one pin that lost every read of the pull-up contest.
c6_probe_budget_t
Statically provable loop bounds (NASA Power of 10 Rule 2).
Definition c6_probe.h:105
@ k_c6_probe_hs_poll_ms
Delay between handshake polls.
Definition c6_probe.h:109
@ k_c6_probe_min_votes
Votes required to claim a mapping.
Definition c6_probe.h:114
@ k_c6_probe_dump_bytes
Payload bytes hex-dumped per frame.
Definition c6_probe.h:110
@ k_c6_probe_xfer_per_mode
Transactions attempted per SPI mode.
Definition c6_probe.h:106
@ k_c6_probe_mode_count
SPI modes swept.
Definition c6_probe.h:107
@ k_c6_probe_str_max
Longest console literal accepted.
Definition c6_probe.h:111
@ k_c6_probe_pull_samples
Reads per pin in the pull-up contest.
Definition c6_probe.h:112
@ k_c6_probe_hs_poll_max
Handshake polls before giving up.
Definition c6_probe.h:108
@ k_c6_probe_pull_settle_ms
Settle between pull-up contest reads.
Definition c6_probe.h:113
c6_wire_idx_t
Index into the Pmod1 muxed-net table.
Definition c6_probe.h:221
@ k_c6_wire_p804
SS2 – J26-1 in SPI, J26-4 in UART.
Definition c6_probe.h:226
@ k_c6_wire_p801
COPI2 – J26-2 in SPI and UART positions.
Definition c6_probe.h:223
@ k_c6_wire_p802
CIPO2 – J26-3 in SPI and UART positions.
Definition c6_probe.h:224
@ k_c6_wire_p800
CTS2 – J26-1 only in the UART position.
Definition c6_probe.h:222
@ k_c6_wire_p803
SCK2 – J26-4 only in the SPI position.
Definition c6_probe.h:225
@ k_c6_wire_count
Muxed-net candidate count.
Definition c6_probe.h:227
ra8_err_t c6_probe_sideband_init(void)
Claim the four Pmod1 side-band pins as no-pull digital inputs.
uint8_t c6_probe_best(const uint32_t *votes, uint8_t ignore, uint32_t min_votes)
Pick the side-band pin that won the vote outright, or report none.
void c6_probe_wire_test(void)
Run the drive-and-release test over every Pmod1 muxed net.
void c6_probe_put_hex(uint32_t value, uint8_t digits)
Emit a value as fixed-width lowercase hexadecimal.
Definition c6_console.c:56
uint8_t c6_probe_cs_hunt(c6_probe_stats_t *st)
Find which MCU pin the board's Pmod1 mux has wired to the C6's chip-select, and identify HANDSHAKE at...
void c6_probe_resolve_map(const c6_probe_stats_t *st, uint8_t *hs_idx, uint8_t *dr_idx)
Resolve the HANDSHAKE and DATA_READY side-band map from the accumulated evidence.
The esp-hosted SPI full-duplex wire format, hand-decoded.
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
SPI_B controller driver (RA8D2 Type-B SPI peripheral).
ra8_spi_mode_t
CPOL / CPHA combinations.
Definition ra8_spi.h:61
Running evidence gathered across every transaction.
Definition c6_probe.h:280
uint8_t pull_low[k_c6_sb_count]
Reads that lost to an external sink.
Definition c6_probe.h:289
uint8_t ever_high[k_c6_sb_count]
Pin was seen high at least once.
Definition c6_probe.h:287
uint32_t hs_vote[k_c6_sb_count]
Pin dropped while CS was asserted.
Definition c6_probe.h:285
uint32_t attempts
Transactions clocked.
Definition c6_probe.h:281
uint32_t idle_frames
Idle filler frames decoded.
Definition c6_probe.h:282
uint32_t dr_vote[k_c6_sb_count]
Pin dropped once the queue drained.
Definition c6_probe.h:286
uint32_t data_frames
Real frames with a good checksum.
Definition c6_probe.h:283
uint8_t pull_samples
Pull-up reads per pin; 0 = not run.
Definition c6_probe.h:290
uint8_t ever_low[k_c6_sb_count]
Pin was seen low at least once.
Definition c6_probe.h:288
uint32_t bad_csum_frames
Sane shape, checksum mismatched.
Definition c6_probe.h:284
One simultaneous reading of every side-band pin.
Definition c6_probe.h:194
uint8_t level[k_c6_sb_count]
Per-pin logic level (0 or 1).
Definition c6_probe.h:195