14extern MMC_HandleTypeDef
hmmc1;
34 static const uint8_t reset_cmd = 0x1E;
56 if (
huart9.Init.BaudRate == baud) {
72 if (!
b->gnss_powered) {
75 uint32_t baud = (attempt % 2U == 0U) ? 9600U : 38400U;
113 uint8_t* extra, uint8_t extra_len,
168 int32_t diag = (int32_t)((stage << 8) | r1);
182 uint8_t r1 = 0xFF, r7[4], ocr[4], cid[16];
203 if ((int32_t)(init_deadline - deadline) > 0) {
204 init_deadline = deadline;
233 uint32_t ocr_word = ((uint32_t)ocr[0] << 24) |
234 ((uint32_t)ocr[1] << 16) | ((uint32_t)ocr[2] << 8) |
238 (int32_t)(cid[0] | ((ocr_word &
SD_OCR_CCS) ? 0x100U : 0U)));
263 HAL_MMC_CardCIDTypeDef cid;
267 HAL_MMC_CardStateTypeDef
state = HAL_MMC_GetCardState(&
hmmc1);
268 if (
state != HAL_MMC_CARD_TRANSFER) {
276 if (!
b->emmc_reset_released) {
279 if (!
b->emmc_init_attempted) {
280 b->emmc_init_attempted =
true;
283 return b->emmc_result;
288 b->devices.io_context =
NULL;
289 b->devices.configured_mask = 0;
290 b->gnss_powered =
false;
291 b->emmc_reset_released =
false;
292 b->emmc_init_attempted =
false;
353 b->gnss_powered =
true;
361 b->emmc_reset_released =
true;
365 uint32_t budget_ms) {
369 if (!
b || !
b->adc_ready) {
377 for (
unsigned i = 0; i < 16U; ++i) {
379 if (used >= budget_ms ||
388 battery.raw_counts = (sum + 8U) / 16U;
389 battery.sampled_at_ms = now_ms;
400 uint8_t attempt, uint32_t now_ms,
401 uint32_t budget_ms) {
uint8_t byte
Minimal Arduino.h stub for native unit tests.
void MX_SDMMC1_MMC_Init(void)
SDMMC1 Initialization Function.
#define RADIO_BUSY_GPIO_Port
#define REG_3V6_EN_GPIO_Port
#define GPS_ANT_STATUS_GPIO_Port
#define GPS_ANT_STATUS_Pin
#define RADIO_NRST_GPIO_Port
#define ETH_RST_GPIO_Port
#define EMMC_RST_GPIO_Port
uint32_t board_now_ms(void)
bool board_soft_init(void(*init)(void))
static bool board_deadline_passed(uint32_t deadline_ms)
static uint32_t board_ms_left(uint32_t deadline_ms)
bool board_adc_read(board_adc_input_t input, uint16_t *counts, uint32_t timeout_ms)
bool board_adc_init(void)
static self_test_reply_t emmc_identify(void)
static self_test_reply_t sd_fail(board_spi_status_t st, int stage, uint8_t r1)
static board_spi_status_t sd_command(uint8_t index, uint32_t arg, uint8_t *r1, uint8_t *extra, uint8_t extra_len, uint32_t deadline)
static void wait_since_boot(uint32_t ms)
bool board_bringup_on_usb(void)
static bool ms5611_reset(void)
static self_test_reply_t emmc_probe(board_bringup_t *b)
static self_test_reply_t gnss_probe(board_bringup_t *b, uint8_t attempt, uint32_t budget_ms)
static board_spi_status_t sd_read_cid(uint8_t *r1, uint8_t cid[16], uint32_t deadline)
static self_test_reply_t reply(self_test_result_t result, int32_t diag)
static self_test_reply_t sd_nand_probe(uint32_t budget_ms)
self_test_battery_t board_bringup_read_battery(void *context, uint32_t now_ms, uint32_t budget_ms)
static void enable(board_bringup_t *b, uint16_t device_id)
static bool uart9_set_baud(uint32_t baud)
self_test_reply_t board_bringup_probe(void *context, uint16_t device_id, uint8_t attempt, uint32_t now_ms, uint32_t budget_ms)
void board_bringup_power_up(board_bringup_t *b)
#define BOARD_SD_STAGE_CMD10
#define BOARD_EMMC_DIAG_STATE
#define BOARD_GNSS_LISTEN_MS
#define BOARD_SD_STAGE_ACMD41
#define BOARD_GNSS_DIAG_ANTENNA_SHORT
#define BOARD_SD_STAGE_CMD8
#define BOARD_SD_STAGE_CMD0
#define BOARD_SD_STAGE_CMD58
board_spi_status_t board_spi_idle_clocks(board_spi_device_t device, uint16_t len, uint32_t deadline_ms)
self_test_reply_t board_spi_self_test_exchange(void *context, uint16_t device_id, uint8_t mode, uint32_t max_hz, self_test_spi_frame_t *frames, uint8_t count, uint32_t budget_ms)
bool board_spi_init(void)
void board_spi_deselect(board_spi_device_t device)
board_spi_status_t board_spi_lock(board_spi_device_t device, uint32_t deadline_ms)
void board_spi_unlock(board_spi_device_t device)
board_spi_status_t board_spi_shift(board_spi_device_t device, const uint8_t *tx, uint8_t *rx, uint16_t len, uint32_t deadline_ms)
void board_spi_select(board_spi_device_t device)
bool board_time_start(void)
bool board_uart9_apply_baud(uint32_t baud)
osStatus_t osDelay(uint32_t ticks)
Wait for Timeout (Time Delay).
static ActuatorControllerState state
gnss_frame_kind_t gnss_frame_feed(gnss_frame_parser_t *p, uint8_t byte)
static void start(gnss_frame_parser_t *p, uint8_t byte)
void gnss_frame_init(gnss_frame_parser_t *parser)
GPIO_PinState HAL_GPIO_ReadPin(const GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__)
Clear the specified UART pending flag.
struct __UART_HandleTypeDef UART_HandleTypeDef
UART handle Structure definition.
#define UART_CLEAR_FEF
Framing Error Clear Flag.
#define UART_CLEAR_OREF
Overrun Error Clear Flag.
#define UART_CLEAR_PEF
Parity Error Clear Flag.
#define UART_CLEAR_NEF
Noise Error detected Clear Flag.
*brief create JSON pointer *sa reference_tokens const string_t const string_t & b
*brief create a new JSON pointer by appending the unescaped token at the end of the JSON pointer *sa string_t token
UART_HandleTypeDef huart9
bool sd_r7_ok(const uint8_t r7[4])
void sd_command_frame(uint8_t out[6], uint8_t index, uint32_t argument)
bool sd_cid_ok(const uint8_t cid[16])
#define SD_CMD8_SEND_IF_COND
#define SD_CMD58_READ_OCR
#define SD_CMD10_SEND_CID
#define SD_ACMD41_SD_SEND_OP_COND
static bool sd_is_r1(uint8_t byte)
self_test_reply_t self_test_devices_probe(void *context, uint16_t device_id, uint8_t attempt, uint32_t now_ms, uint32_t budget_ms)
@ SELF_TEST_DEVICE_ETHERNET
@ SELF_TEST_DEVICE_HIGH_G
@ SELF_TEST_DEVICE_BAROMETER
#define SELF_TEST_DEVICE_ENABLED(id)
@ SELF_TEST_NOT_CONFIGURED
static std::vector< uint8_t > frame(uint8_t hi, uint8_t lo, size_t payload_len, uint8_t fill)
One wire packet: len(4, LE) then len bytes of body, where the first 4 body bytes are ty/packet_id(2)/...
static self_test_battery_t battery(void *context, uint32_t now_ms, uint32_t budget_ms)