HF-TMC9660 Driver
Hardware Agnostic C++ Driver for the TMC9660
Loading...
Searching...
No Matches
TMC9660Bootloader.hpp
Go to the documentation of this file.
1
6#pragma once
7
9#include <cstddef>
10#include <cstdint>
11
12namespace tmc9660 {
13
14namespace bootcfg {
15
17
18enum class LDOVoltage : uint8_t {
19 Disabled = 0,
20 V2_5 = 1,
21 V3_3 = 2,
22 V5_0 = 3,
23};
24
25enum class LDOSlope : uint8_t {
26 Slope3ms = 0,
27 Slope1_5ms = 1,
28 Slope0_75ms = 2,
29 Slope0_37ms = 3,
30};
31
32enum class BootMode : uint8_t {
33 Register = 1,
34 Parameter = 2,
35};
36
37enum class UartRxPin : uint8_t { GPIO7 = 0, GPIO1 = 1 };
38enum class UartTxPin : uint8_t { GPIO6 = 0, GPIO0 = 1 };
39
40enum class BaudRate : uint8_t {
41 BR9600 = 0,
42 BR19200,
43 BR38400,
44 BR57600,
47 Auto8x,
48 Auto16x,
49};
50
51enum class RS485TxEnPin : uint8_t { None = 0, GPIO8 = 1, GPIO2 = 2 };
52
53enum class SPIInterface : uint8_t { IFACE0 = 0, IFACE1 = 1 };
54
55enum class SPI0SckPin : uint8_t { GPIO6 = 0, GPIO11 = 1 };
56
57enum class SPIFlashFreq : uint8_t { Div1 = 0, Div2 = 1, Div4 = 3 };
58
59enum class I2CSdaPin : uint8_t { GPIO5 = 0, GPIO11 = 1, GPIO14 = 2 };
60enum class I2CSclPin : uint8_t { GPIO4 = 0, GPIO12 = 1, GPIO13 = 2 };
61
62enum class I2CFreq : uint8_t { Freq100k = 0, Freq200k, Freq400k, Freq800k };
63
64enum class ClockSource : uint8_t { Internal = 0, External = 1 };
65
66enum class ExtSourceType : uint8_t { Oscillator = 0, Clock = 1 };
67
68enum class XtalDrive : uint8_t {
69 Freq8MHz = 1,
70 Freq16MHz = 3,
71 Freq24MHz = 5,
72 Freq32MHz = 6,
73};
74
75enum class SysClkSource : uint8_t { IntOsc = 0, PLL = 1 };
76
77enum class SysClkDiv : uint8_t { Div1 = 0, Div15MHz = 3 };
78
79} // namespace bootcfg
80
81namespace bootaddr {
83constexpr uint32_t BASE = 0x00020000;
85constexpr uint32_t UART_ADDR = BASE + 0x02;
87constexpr uint32_t RS485_DELAY = BASE + 0x04;
89constexpr uint32_t COMM_CONFIG = BASE + 0x06;
91constexpr uint32_t SPI_FLASH = BASE + 0x0A;
93constexpr uint32_t I2C_CONFIG = BASE + 0x0C;
95constexpr uint32_t GPIO_OUT = BASE + 0x0E;
97constexpr uint32_t GPIO_DIR = BASE + 0x10;
99constexpr uint32_t GPIO_PU = BASE + 0x12;
101constexpr uint32_t GPIO_PD = BASE + 0x14;
103constexpr uint32_t GPIO_ANALOG = BASE + 0x16;
105constexpr uint32_t CLOCK_CONFIG = BASE + 0x18;
106} // namespace bootaddr
107
116
126
136
144
151
160
169
180
183 uint32_t outputMask{0};
184 uint32_t directionMask{0};
185 uint32_t pullUpMask{0};
186 uint32_t pullDownMask{0};
187 uint32_t analogMask{0};
188};
189
202
211public:
212 explicit TMC9660Bootloader(TMC9660CommInterface &comm, uint8_t address = 0) noexcept;
213
215 bool setBank(uint8_t bank) noexcept;
217 bool setAddress(uint32_t addr) noexcept;
219 bool write8(uint8_t v) noexcept;
221 bool write16(uint16_t v) noexcept;
223 bool write32(uint32_t v) noexcept;
225 bool write32Inc(const uint32_t *values, size_t count) noexcept;
227 bool otpBurn(uint8_t page) noexcept;
228
230 bool applyConfiguration(const BootloaderConfig &cfg) noexcept;
231
232private:
233 bool sendCommand(uint8_t op, uint16_t type, uint8_t bank, uint32_t value,
234 uint32_t *reply = nullptr) noexcept;
235
237 uint8_t address_;
238};
239
240} // namespace tmc9660
Communication interfaces for TMC9660 Parameter Mode devices using TMCL protocol over SPI and UART.
SPI status codes as per TMC9660 Parameter Mode.
Definition TMC9660CommInterface.hpp:224
Convenience wrapper around the bootloader TMCL commands.
Definition TMC9660Bootloader.hpp:210
bool setAddress(uint32_t addr) noexcept
Set the address within the current bank.
Definition TMC9660Bootloader.cpp:31
TMC9660CommInterface & comm_
Definition TMC9660Bootloader.hpp:236
bool applyConfiguration(const BootloaderConfig &cfg) noexcept
Apply all fields of a ::BootloaderConfig.
Definition TMC9660Bootloader.cpp:60
bool sendCommand(uint8_t op, uint16_t type, uint8_t bank, uint32_t value, uint32_t *reply=nullptr) noexcept
Definition TMC9660Bootloader.cpp:9
bool otpBurn(uint8_t page) noexcept
Permanently burn the given OTP page.
Definition TMC9660Bootloader.cpp:56
bool write32(uint32_t v) noexcept
Write a 32 bit word.
Definition TMC9660Bootloader.cpp:44
bool write16(uint16_t v) noexcept
Write a 16 bit word.
Definition TMC9660Bootloader.cpp:40
uint8_t address_
Definition TMC9660Bootloader.hpp:237
bool write32Inc(const uint32_t *values, size_t count) noexcept
Write multiple 32 bit words starting at the current address.
Definition TMC9660Bootloader.cpp:48
bool setBank(uint8_t bank) noexcept
Select the target register bank.
Definition TMC9660Bootloader.cpp:27
bool write8(uint8_t v) noexcept
Write a single byte to the previously selected address.
Definition TMC9660Bootloader.cpp:36
constexpr uint32_t BASE
Base offset of the configuration registers inside bank 5.
Definition TMC9660Bootloader.hpp:83
constexpr uint32_t UART_ADDR
UART device/host address register.
Definition TMC9660Bootloader.hpp:85
constexpr uint32_t GPIO_DIR
GPIO direction register.
Definition TMC9660Bootloader.hpp:97
constexpr uint32_t SPI_FLASH
SPI flash configuration register.
Definition TMC9660Bootloader.hpp:91
constexpr uint32_t CLOCK_CONFIG
Clock configuration register.
Definition TMC9660Bootloader.hpp:105
constexpr uint32_t GPIO_PU
GPIO pull-up register.
Definition TMC9660Bootloader.hpp:99
constexpr uint32_t I2C_CONFIG
I2C EEPROM configuration register.
Definition TMC9660Bootloader.hpp:93
constexpr uint32_t COMM_CONFIG
Communication selection (UART/SPI/RS485).
Definition TMC9660Bootloader.hpp:89
constexpr uint32_t RS485_DELAY
RS485 TXEN delay configuration.
Definition TMC9660Bootloader.hpp:87
constexpr uint32_t GPIO_PD
GPIO pull-down register.
Definition TMC9660Bootloader.hpp:101
constexpr uint32_t GPIO_ANALOG
GPIO analog enable register.
Definition TMC9660Bootloader.hpp:103
constexpr uint32_t GPIO_OUT
GPIO output level register.
Definition TMC9660Bootloader.hpp:95
SysClkSource
Definition TMC9660Bootloader.hpp:75
SPIFlashFreq
Definition TMC9660Bootloader.hpp:57
I2CSclPin
Definition TMC9660Bootloader.hpp:60
I2CFreq
Definition TMC9660Bootloader.hpp:62
ClockSource
Definition TMC9660Bootloader.hpp:64
LDOSlope
Definition TMC9660Bootloader.hpp:25
LDOVoltage
Enumerations describing bootloader configuration options.
Definition TMC9660Bootloader.hpp:18
BootMode
Definition TMC9660Bootloader.hpp:32
UartRxPin
Definition TMC9660Bootloader.hpp:37
SPI0SckPin
Definition TMC9660Bootloader.hpp:55
UartTxPin
Definition TMC9660Bootloader.hpp:38
SysClkDiv
Definition TMC9660Bootloader.hpp:77
ExtSourceType
Definition TMC9660Bootloader.hpp:66
XtalDrive
Definition TMC9660Bootloader.hpp:68
BaudRate
Definition TMC9660Bootloader.hpp:40
I2CSdaPin
Definition TMC9660Bootloader.hpp:59
RS485TxEnPin
Definition TMC9660Bootloader.hpp:51
SPIInterface
Definition TMC9660Bootloader.hpp:53
Definition tmc9660_param_mode_tmcl.hpp:14
Bootloader behaviour configuration.
Definition TMC9660Bootloader.hpp:118
bool start_motor_control
Definition TMC9660Bootloader.hpp:124
bootcfg::BootMode boot_mode
Definition TMC9660Bootloader.hpp:119
bool bl_config_fault
Definition TMC9660Bootloader.hpp:123
bool bl_ready_fault
Definition TMC9660Bootloader.hpp:120
bool disable_selftest
Definition TMC9660Bootloader.hpp:122
bool bl_exit_fault
Definition TMC9660Bootloader.hpp:121
Aggregated bootloader configuration written by ::TMC9660Bootloader.
Definition TMC9660Bootloader.hpp:191
ClockConfig clock
Definition TMC9660Bootloader.hpp:199
SPIFlashConfig spiFlash
Definition TMC9660Bootloader.hpp:197
SPIBootConfig spiComm
Definition TMC9660Bootloader.hpp:196
UARTConfig uart
Definition TMC9660Bootloader.hpp:194
BootConfig boot
Definition TMC9660Bootloader.hpp:193
LDOConfig ldo
Definition TMC9660Bootloader.hpp:192
GPIOConfig gpio
Definition TMC9660Bootloader.hpp:200
I2CConfig i2c
Definition TMC9660Bootloader.hpp:198
RS485Config rs485
Definition TMC9660Bootloader.hpp:195
System clock selection parameters.
Definition TMC9660Bootloader.hpp:171
bootcfg::SysClkDiv sysclk_div
Definition TMC9660Bootloader.hpp:178
uint8_t rdiv
Definition TMC9660Bootloader.hpp:177
bootcfg::ExtSourceType ext_source_type
Definition TMC9660Bootloader.hpp:173
bool xtal_boost
Definition TMC9660Bootloader.hpp:175
bootcfg::XtalDrive xtal_drive
Definition TMC9660Bootloader.hpp:174
bootcfg::SysClkSource pll_selection
Definition TMC9660Bootloader.hpp:176
bootcfg::ClockSource use_external
Definition TMC9660Bootloader.hpp:172
Initial state of the general purpose pins during boot.
Definition TMC9660Bootloader.hpp:182
uint32_t outputMask
Definition TMC9660Bootloader.hpp:183
uint32_t directionMask
Definition TMC9660Bootloader.hpp:184
uint32_t pullDownMask
Definition TMC9660Bootloader.hpp:186
uint32_t analogMask
Definition TMC9660Bootloader.hpp:187
uint32_t pullUpMask
Definition TMC9660Bootloader.hpp:185
External I2C EEPROM configuration.
Definition TMC9660Bootloader.hpp:162
bootcfg::I2CFreq freq_code
Definition TMC9660Bootloader.hpp:167
bootcfg::I2CSdaPin sda_pin
Definition TMC9660Bootloader.hpp:164
bootcfg::I2CSclPin scl_pin
Definition TMC9660Bootloader.hpp:165
bool enable_eeprom
Definition TMC9660Bootloader.hpp:163
uint8_t address_bits
Definition TMC9660Bootloader.hpp:166
Configuration of the on-chip LDO regulators.
Definition TMC9660Bootloader.hpp:109
bool ldo_short_fault
Definition TMC9660Bootloader.hpp:114
bootcfg::LDOVoltage vext2
Definition TMC9660Bootloader.hpp:111
bootcfg::LDOSlope slope_vext1
Definition TMC9660Bootloader.hpp:112
bootcfg::LDOVoltage vext1
Definition TMC9660Bootloader.hpp:110
bootcfg::LDOSlope slope_vext2
Definition TMC9660Bootloader.hpp:113
Optional RS485 transceiver control via the UART_TXEN pin.
Definition TMC9660Bootloader.hpp:138
uint8_t txen_post_delay
Definition TMC9660Bootloader.hpp:142
uint8_t txen_pre_delay
Definition TMC9660Bootloader.hpp:141
bootcfg::RS485TxEnPin txen_pin
Definition TMC9660Bootloader.hpp:140
bool enable_rs485
Definition TMC9660Bootloader.hpp:139
SPI interface used for bootloader commands.
Definition TMC9660Bootloader.hpp:146
bootcfg::SPI0SckPin spi0_sck_pin
Definition TMC9660Bootloader.hpp:149
bool disable_spi
Definition TMC9660Bootloader.hpp:147
bootcfg::SPIInterface boot_spi_iface
Definition TMC9660Bootloader.hpp:148
External SPI flash configuration.
Definition TMC9660Bootloader.hpp:153
uint8_t cs_pin
Definition TMC9660Bootloader.hpp:157
bootcfg::SPI0SckPin spi0_sck_pin
Definition TMC9660Bootloader.hpp:156
bootcfg::SPIFlashFreq freq_div
Definition TMC9660Bootloader.hpp:158
bootcfg::SPIInterface flash_spi_iface
Definition TMC9660Bootloader.hpp:155
bool enable_flash
Definition TMC9660Bootloader.hpp:154
UART communication settings for the bootloader.
Definition TMC9660Bootloader.hpp:128
uint8_t device_address
Definition TMC9660Bootloader.hpp:129
bootcfg::BaudRate baud_rate
Definition TMC9660Bootloader.hpp:134
uint8_t host_address
Definition TMC9660Bootloader.hpp:130
bool disable_uart
Definition TMC9660Bootloader.hpp:131
bootcfg::UartTxPin tx_pin
Definition TMC9660Bootloader.hpp:133
bootcfg::UartRxPin rx_pin
Definition TMC9660Bootloader.hpp:132