mirror of
https://github.com/esphome/esphome.git
synced 2025-10-03 10:32:21 +01:00
[sx126x] Add additional FSK CRC options (#10928)
This commit is contained in:
@@ -15,6 +15,10 @@ CONF_BANDWIDTH = "bandwidth"
|
||||
CONF_BITRATE = "bitrate"
|
||||
CONF_CODING_RATE = "coding_rate"
|
||||
CONF_CRC_ENABLE = "crc_enable"
|
||||
CONF_CRC_INVERTED = "crc_inverted"
|
||||
CONF_CRC_SIZE = "crc_size"
|
||||
CONF_CRC_POLYNOMIAL = "crc_polynomial"
|
||||
CONF_CRC_INITIAL = "crc_initial"
|
||||
CONF_DEVIATION = "deviation"
|
||||
CONF_DIO1_PIN = "dio1_pin"
|
||||
CONF_HW_VERSION = "hw_version"
|
||||
@@ -188,6 +192,14 @@ CONFIG_SCHEMA = (
|
||||
cv.Required(CONF_BUSY_PIN): pins.internal_gpio_input_pin_schema,
|
||||
cv.Optional(CONF_CODING_RATE, default="CR_4_5"): cv.enum(CODING_RATE),
|
||||
cv.Optional(CONF_CRC_ENABLE, default=False): cv.boolean,
|
||||
cv.Optional(CONF_CRC_INVERTED, default=True): cv.boolean,
|
||||
cv.Optional(CONF_CRC_SIZE, default=2): cv.int_range(min=1, max=2),
|
||||
cv.Optional(CONF_CRC_POLYNOMIAL, default=0x1021): cv.All(
|
||||
cv.hex_int, cv.Range(min=0, max=0xFFFF)
|
||||
),
|
||||
cv.Optional(CONF_CRC_INITIAL, default=0x1D0F): cv.All(
|
||||
cv.hex_int, cv.Range(min=0, max=0xFFFF)
|
||||
),
|
||||
cv.Optional(CONF_DEVIATION, default=5000): cv.int_range(min=0, max=100000),
|
||||
cv.Required(CONF_DIO1_PIN): pins.internal_gpio_input_pin_schema,
|
||||
cv.Required(CONF_FREQUENCY): cv.int_range(min=137000000, max=1020000000),
|
||||
@@ -251,6 +263,10 @@ async def to_code(config):
|
||||
cg.add(var.set_shaping(config[CONF_SHAPING]))
|
||||
cg.add(var.set_bitrate(config[CONF_BITRATE]))
|
||||
cg.add(var.set_crc_enable(config[CONF_CRC_ENABLE]))
|
||||
cg.add(var.set_crc_inverted(config[CONF_CRC_INVERTED]))
|
||||
cg.add(var.set_crc_size(config[CONF_CRC_SIZE]))
|
||||
cg.add(var.set_crc_polynomial(config[CONF_CRC_POLYNOMIAL]))
|
||||
cg.add(var.set_crc_initial(config[CONF_CRC_INITIAL]))
|
||||
cg.add(var.set_payload_length(config[CONF_PAYLOAD_LENGTH]))
|
||||
cg.add(var.set_preamble_size(config[CONF_PREAMBLE_SIZE]))
|
||||
cg.add(var.set_preamble_detect(config[CONF_PREAMBLE_DETECT]))
|
||||
|
@@ -235,6 +235,16 @@ void SX126x::configure() {
|
||||
buf[7] = (fdev >> 0) & 0xFF;
|
||||
this->write_opcode_(RADIO_SET_MODULATIONPARAMS, buf, 8);
|
||||
|
||||
// set crc params
|
||||
if (this->crc_enable_) {
|
||||
buf[0] = this->crc_initial_ >> 8;
|
||||
buf[1] = this->crc_initial_ & 0xFF;
|
||||
this->write_register_(REG_CRC_INITIAL, buf, 2);
|
||||
buf[0] = this->crc_polynomial_ >> 8;
|
||||
buf[1] = this->crc_polynomial_ & 0xFF;
|
||||
this->write_register_(REG_CRC_POLYNOMIAL, buf, 2);
|
||||
}
|
||||
|
||||
// set packet params and sync word
|
||||
this->set_packet_params_(this->get_max_packet_size());
|
||||
if (!this->sync_value_.empty()) {
|
||||
@@ -276,7 +286,11 @@ void SX126x::set_packet_params_(uint8_t payload_length) {
|
||||
buf[4] = 0x00;
|
||||
buf[5] = (this->payload_length_ > 0) ? 0x00 : 0x01;
|
||||
buf[6] = payload_length;
|
||||
buf[7] = this->crc_enable_ ? 0x06 : 0x01;
|
||||
if (this->crc_enable_) {
|
||||
buf[7] = (this->crc_inverted_ ? 0x04 : 0x00) + (this->crc_size_ & 0x02);
|
||||
} else {
|
||||
buf[7] = 0x01;
|
||||
}
|
||||
buf[8] = 0x00;
|
||||
this->write_opcode_(RADIO_SET_PACKETPARAMS, buf, 9);
|
||||
}
|
||||
|
@@ -67,6 +67,10 @@ class SX126x : public Component,
|
||||
void set_busy_pin(InternalGPIOPin *busy_pin) { this->busy_pin_ = busy_pin; }
|
||||
void set_coding_rate(uint8_t coding_rate) { this->coding_rate_ = coding_rate; }
|
||||
void set_crc_enable(bool crc_enable) { this->crc_enable_ = crc_enable; }
|
||||
void set_crc_inverted(bool crc_inverted) { this->crc_inverted_ = crc_inverted; }
|
||||
void set_crc_size(uint8_t crc_size) { this->crc_size_ = crc_size; }
|
||||
void set_crc_polynomial(uint16_t crc_polynomial) { this->crc_polynomial_ = crc_polynomial; }
|
||||
void set_crc_initial(uint16_t crc_initial) { this->crc_initial_ = crc_initial; }
|
||||
void set_deviation(uint32_t deviation) { this->deviation_ = deviation; }
|
||||
void set_dio1_pin(InternalGPIOPin *dio1_pin) { this->dio1_pin_ = dio1_pin; }
|
||||
void set_frequency(uint32_t frequency) { this->frequency_ = frequency; }
|
||||
@@ -118,6 +122,11 @@ class SX126x : public Component,
|
||||
char version_[16];
|
||||
SX126xBw bandwidth_{SX126X_BW_125000};
|
||||
uint32_t bitrate_{0};
|
||||
bool crc_enable_{false};
|
||||
bool crc_inverted_{false};
|
||||
uint8_t crc_size_{0};
|
||||
uint16_t crc_polynomial_{0};
|
||||
uint16_t crc_initial_{0};
|
||||
uint32_t deviation_{0};
|
||||
uint32_t frequency_{0};
|
||||
uint32_t payload_length_{0};
|
||||
@@ -131,7 +140,6 @@ class SX126x : public Component,
|
||||
uint8_t shaping_{0};
|
||||
uint8_t spreading_factor_{0};
|
||||
int8_t pa_power_{0};
|
||||
bool crc_enable_{false};
|
||||
bool rx_start_{false};
|
||||
bool rf_switch_{false};
|
||||
};
|
||||
|
@@ -53,6 +53,8 @@ enum SX126xOpCode : uint8_t {
|
||||
|
||||
enum SX126xRegister : uint16_t {
|
||||
REG_VERSION_STRING = 0x0320,
|
||||
REG_CRC_INITIAL = 0x06BC,
|
||||
REG_CRC_POLYNOMIAL = 0x06BE,
|
||||
REG_GFSK_SYNCWORD = 0x06C0,
|
||||
REG_LORA_SYNCWORD = 0x0740,
|
||||
REG_OCP = 0x08E7,
|
||||
|
@@ -11,6 +11,10 @@ sx126x:
|
||||
pa_power: 3
|
||||
bandwidth: 125_0kHz
|
||||
crc_enable: true
|
||||
crc_initial: 0x1D0F
|
||||
crc_polynomial: 0x1021
|
||||
crc_size: 2
|
||||
crc_inverted: true
|
||||
frequency: 433920000
|
||||
modulation: LORA
|
||||
rx_start: true
|
||||
|
Reference in New Issue
Block a user