From e844dd519940ca374021b5d9776ab99dded9ab2f Mon Sep 17 00:00:00 2001 From: jaseg Date: Mon, 15 Feb 2021 20:03:43 +0100 Subject: [PATCH] fw: add basic driver for high-g accelerometer --- doc/quick-tech-report/rotohsm_paper.pdf | Bin 1192127 -> 1190616 bytes doc/quick-tech-report/rotohsm_tech_report.pdf | Bin 112344 -> 111459 bytes prototype/fw/Makefile | 2 +- prototype/fw/src/main.c | 184 +++++++++++++++++- prototype/fw/upstream/PyCortexMDebug | 2 +- .../rotor_base_pcb/rotor_base_pcb.kicad_prl | 10 +- .../rotor_base_pcb/rotor_base_pcb.kicad_pro | 8 +- 7 files changed, 192 insertions(+), 14 deletions(-) diff --git a/doc/quick-tech-report/rotohsm_paper.pdf b/doc/quick-tech-report/rotohsm_paper.pdf index d16befe6cd96aa588b5c91b09807edf2df8b8a59..f0ad0b66c41accfd83c8cf85816dd8334a591fd9 100644 GIT binary patch delta 23063 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 Pur#yaQdM>JcjE#8GPhX< diff --git a/doc/quick-tech-report/rotohsm_tech_report.pdf b/doc/quick-tech-report/rotohsm_tech_report.pdf index 8fdb2b979eb41ae240543c3ce92a46188209c5b8..d87bc8e9903fa45d019a0045e5db5101f072f1fd 100644 GIT binary patch delta 14587 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 R<2E!kH{()Ob@g}S0szMfUPb@_ diff --git a/prototype/fw/Makefile b/prototype/fw/Makefile index 32ded36..f61e949 100644 --- a/prototype/fw/Makefile +++ b/prototype/fw/Makefile @@ -125,7 +125,7 @@ CXXFLAGS += -I. LDFLAGS += $(ARCH_FLAGS) $(SYSTEM_FLAGS) LIBS += -lgcc -LDFLAGS += -Wl,--gc-sections +#LDFLAGS += -Wl,--gc-sections LINKMEM_FLAGS ?= --trim-stubs=startup.o --trace-sections .isr_vector --highlight-subdirs $(BUILDDIR) diff --git a/prototype/fw/src/main.c b/prototype/fw/src/main.c index 42c1ea7..cf0c9f4 100644 --- a/prototype/fw/src/main.c +++ b/prototype/fw/src/main.c @@ -38,13 +38,174 @@ void packetize(void *pkt, struct ll_pkt_trailer *trailer) { trailer->crc32 = pkt_crc(pkt, trailer); } +enum mems_regs { + MEMS_REG_CTRL0, /* 0 */ + MEMS_REG_CTRL1, /* 1 */ + MEMS_REG_CONFIG, /* 2 */ + MEMS_REG_STATUS0, /* 3 */ + MEMS_REG_STATUS1, /* 4 */ + MEMS_REG_STATUS2, /* 5 */ + MEMS_REG_CHIP_REVID, /* 6 */ + MEMS_REG_ACC_CHX_LOW, /* 7 */ + MEMS_REG_ACC_CHX_HIGH, /* 8 */ + MEMS_REG_ACC_CHY_LOW, /* 9 */ + MEMS_REG_ACC_CHY_HIGH, /* 10 */ + MEMS_REG_OSC_COUNTER, /* 11 */ + MEMS_REG_ID_SENSOR_TYPE, /* 12 */ + MEMS_REG_ID_VEH_MANUF, /* 13 */ + MEMS_REG_ID_SENSOR_MANUF, /* 14 */ + MEMS_REG_ID_LOT0, /* 15 */ + MEMS_REG_ID_LOT1, /* 16 */ + MEMS_REG_ID_LOT2, /* 17 */ + MEMS_REG_ID_LOT3, /* 18 */ + MEMS_REG_ID_WAFER, /* 19 */ + MEMS_REG_ID_COOR_X, /* 20 */ + MEMS_REG_ID_COOR_Y, /* 21 */ + MEMS_REG_RESET, /* 22 */ + MEMS_REG_OFF_CHX_HIGH, /* 23 */ + MEMS_REG_OFF_CHX_LOW, /* 24 */ + MEMS_REG_OFF_CHY_HIGH, /* 25 */ + MEMS_REG_OFF_CHY_LOW, /* 26 */ +}; + +uint8_t crc8_calc(uint8_t *data, size_t len) { + int acc = 0; + for (size_t i=0; i>= 1; + } + } + return acc; +} + +uint32_t mems_trx_word(uint32_t data) { + /* CAUTION: ST's SPI peripherals behave differently depending on DR register access size, yet the CMSIS headers + * expose it as an 32-bit uint only. In this case, we actually want a 32-bit access. + */ + uint16_t *dr = (uint16_t *)&SPI1->DR; + *dr = data>>16; + while (SPI1->SR & SPI_SR_BSY) + ; + uint32_t out = (*dr) << 16; + *dr = data&0xffff; + while (SPI1->SR & SPI_SR_BSY) + ; + out |= *dr; + return out; +} + +uint32_t mems_trx_cmd(uint32_t cmd) { + GPIOA->BRR = 1<<15; /* De-assert !CS */ + + uint8_t bytes[3] = {(cmd>>16)&0xff, (cmd>>8)&0xff, cmd&0xff}; + uint8_t crc = crc8_calc(bytes, 3); + int parity = !!parity_calc(bytes, 3); + + uint32_t out = mems_trx_word(cmd | (parity<BSRR = 1<<15; /* Assert !CS */ + + return out; +} + +void mems_write_reg(int addr, int val) { + addr &= MEMS_ADDR_Msk; + val &= MEMS_DATA_Msk; + (void)mems_trx_cmd((1<> MEMS_DATA_Pos) & MEMS_DATA_Msk; +} + +int16_t mems_read_meas(int ch) { + ch &= 3; + mems_trx_cmd((ch<> MEMS_MEAS_Pos) << 2; + /* Now do an arithmetic division to sign extend */ + return data / 4; +} + +void mems_spi_init(void) { + SPI1->CR1 = (6<CR2 = (15<CR1 |= SPI_CR1_SPE; +} + +void mems_init(void) { + mems_spi_init(); + + for (size_t i=0; i<10000; i++) { + asm volatile("nop"); + } + + /* Take accelerometer out of initialization phase */ + mems_write_reg(MEMS_REG_CTRL0, 0x01); +} + int main(void) { RCC->AHBENR |= RCC_AHBENR_GPIOAEN; - RCC->APB2ENR |= RCC_APB2ENR_USART1EN; + RCC->APB2ENR |= RCC_APB2ENR_USART1EN | RCC_APB2ENR_SPI1EN; - GPIOA->MODER |= (2 << GPIO_MODER_MODER9_Pos) | (2 << GPIO_MODER_MODER10_Pos); - GPIOA->AFR[1] = (7 << (9-8)*4) | (7 << (10-8)*4); +#define AFRL(pin, val) ((val) << ((pin)*4)) +#define AFRH(pin, val) ((val) << (((pin)-8)*4)) +#define AF(pin) (2<<(2*(pin))) +#define OUT(pin) (1<<(2*(pin))) +#define IN(pin) (0) +#define ANALOG(pin) (3<<(2*(pin))) +#define CLEAR(pin) (3<<(2*(pin))) + + /* GPIO pin config: + * A9: USART 1 TX -> LED + * A10: USART 1 RX -> debug + * A15: Accelerometer CS + * A5/6/7: SPI SCK/MISO/MOSI for Accelerometer + */ + GPIOA->MODER &= ~(CLEAR(15)); /* Clear JTAG TDI pin mode */ + GPIOA->MODER |= AF(9) | AF(10) | OUT(15) | AF(5) | AF(6) | AF(7); + GPIOA->AFR[0] = AFRL(5, 5) | AFRL(6, 5) | AFRL(7, 5); + GPIOA->AFR[1] = AFRH(9, 7) | AFRH(10, 7); + GPIOA->BSRR = 1<<15; /* De-assert accelerometer !CS */ SystemCoreClockUpdate(); int apb2_clock = SystemCoreClock / APB2_PRESC; @@ -56,6 +217,21 @@ int main(void) { USART1->CR2 |= USART_CR2_RXINV; //| USART_CR2_TXINV; USART1->CR1 |= USART_CR1_UE; + /* FIXME DEUBG */ + while (1) { + mems_init(); + for (int i=0; i<100000; i++) + asm volatile("nop"); + for (int i=0; i<300; i++) { + mems_read_meas(0); + //mems_read_reg(MEMS_REG_ID_SENSOR_TYPE); + for (int i=0; i<10000; i++) + asm volatile("nop"); + } + for (int i=0; i<100000; i++) + asm volatile("nop"); + } + int req_seq = 0; int res_seq = 0; struct req_pkt req_buf = { 0 }; @@ -118,7 +294,7 @@ int main(void) { } else { if (rc == sizeof(req_buf)) { crc32_t check_crc = pkt_crc(&req_buf, &req_buf.trailer); - if (check_crc != req_buf.trailer.crc32 || check_crc == 0 || check_crc == -1) { + if (check_crc != req_buf.trailer.crc32 || check_crc == 0 || (int)check_crc == -1) { rx_crc_error += 1; } else { req_seq = req_buf.req_seq; diff --git a/prototype/fw/upstream/PyCortexMDebug b/prototype/fw/upstream/PyCortexMDebug index 89c567b..b5ef1c8 160000 --- a/prototype/fw/upstream/PyCortexMDebug +++ b/prototype/fw/upstream/PyCortexMDebug @@ -1 +1 @@ -Subproject commit 89c567b2847e1d3349b3bec64c3efa76f1ccf982 +Subproject commit b5ef1c8ed36af2e46452e4c3f81506c65b5c0ede diff --git a/prototype/mech_pcbs/rotor_base_pcb/rotor_base_pcb.kicad_prl b/prototype/mech_pcbs/rotor_base_pcb/rotor_base_pcb.kicad_prl index 5daffb0..aae3ce2 100644 --- a/prototype/mech_pcbs/rotor_base_pcb/rotor_base_pcb.kicad_prl +++ b/prototype/mech_pcbs/rotor_base_pcb/rotor_base_pcb.kicad_prl @@ -2,6 +2,7 @@ "board": { "active_layer": 36, "active_layer_preset": "All Layers", + "auto_track_width": true, "hidden_nets": [], "high_contrast_mode": 0, "net_color_mode": 1, @@ -50,17 +51,18 @@ 22, 23, 24, - 26, 27, 28, 29, 30, 31, 32, - 36, - 37 + 33, + 37, + 38 ], - "visible_layers": "fffffff_ffffffff" + "visible_layers": "fffffff_ffffffff", + "zone_display_mode": 0 }, "meta": { "filename": "rotor_base_pcb.kicad_prl", diff --git a/prototype/mech_pcbs/rotor_base_pcb/rotor_base_pcb.kicad_pro b/prototype/mech_pcbs/rotor_base_pcb/rotor_base_pcb.kicad_pro index 8275083..c8394df 100644 --- a/prototype/mech_pcbs/rotor_base_pcb/rotor_base_pcb.kicad_pro +++ b/prototype/mech_pcbs/rotor_base_pcb/rotor_base_pcb.kicad_pro @@ -66,7 +66,7 @@ "courtyards_overlap": "error", "diff_pair_gap_out_of_range": "error", "diff_pair_uncoupled_length_too_long": "error", - "drill_too_small": "error", + "drill_out_of_range": "error", "duplicate_footprints": "warning", "extra_footprint": "warning", "hole_clearance": "error", @@ -74,10 +74,9 @@ "invalid_outline": "error", "item_on_disabled_layer": "error", "items_not_allowed": "error", - "keepout": "error", "length_out_of_range": "error", "malformed_courtyard": "error", - "microvia_drill_too_small": "error", + "microvia_drill_out_of_range": "error", "missing_courtyard": "ignore", "missing_footprint": "warning", "net_conflict": "warning", @@ -95,7 +94,6 @@ "unconnected_items": "error", "unresolved_variable": "error", "via_dangling": "warning", - "via_hole_larger_than_pad": "error", "zone_has_empty_net": "error", "zones_intersect": "error" }, @@ -105,9 +103,11 @@ "max_error": 0.005, "min_clearance": 0.0, "min_copper_edge_clearance": 0.01, + "min_hole_clearance": 0.0, "min_hole_to_hole": 0.25, "min_microvia_diameter": 0.19999999999999998, "min_microvia_drill": 0.09999999999999999, + "min_silk_clearance": 0.0, "min_through_hole_diameter": 0.3, "min_track_width": 0.09999999999999999, "min_via_annular_width": 0.049999999999999996,