diff --git a/ccapp/boards/nucleo_f756zg.overlay b/ccapp/boards/nucleo_f756zg.overlay index 6679f8a..32cd72f 100644 --- a/ccapp/boards/nucleo_f756zg.overlay +++ b/ccapp/boards/nucleo_f756zg.overlay @@ -15,6 +15,8 @@ compatible = "ti,cc2500"; status = "okay"; spi-max-frequency = <500000>; // Max 10 MHz for cc2500, min 420k for driver + channel-frequency = <3>; + start-frequency = <2412>; irq-gpios = <&gpiod 14 GPIO_ACTIVE_LOW>; payload-crc; /* From 0x07 to 0x2E */ diff --git a/drivers/cc2500/cc2500.c b/drivers/cc2500/cc2500.c index af0685e..c893e29 100644 --- a/drivers/cc2500/cc2500.c +++ b/drivers/cc2500/cc2500.c @@ -25,10 +25,13 @@ struct cc2500_config { const int array_len; struct gpio_dt_spec irq; bool gpio2_as_irq; - bool payload_crc; }; struct cc2500_data { + int channel_frequency; + int start_frequency; + int modulation_format; + bool payload_crc; #ifdef CONFIG_CC2500_TRIGGER /** RX queue buffer. */ uint8_t rx_queue_buf[SPI_MSG_QUEUE_LEN * SPI_MAX_MSG_LEN]; @@ -434,13 +437,13 @@ static int cc2500_read(const struct device *dev, uint8_t *buffer, uint8_t data_l int ret = 0; uint8_t status = 0; const struct cc2500_config *config = dev->config; + struct cc2500_data *data = dev->data; cc2500_idle(dev); k_msleep(1); cc2500_flush_rx(dev); cc2500_set_pkt_len(dev, data_len); cc2500_set_rx(dev); #ifdef CONFIG_CC2500_TRIGGER - struct cc2500_data *data = dev->data; uint8_t buffer_full[SPI_MAX_MSG_LEN] = {0}; if (k_msgq_get(&data->rx_queue, buffer_full, K_MSEC(CONFIG_CC2500_READ_TIMEOUT)) < 0) { @@ -452,7 +455,7 @@ static int cc2500_read(const struct device *dev, uint8_t *buffer, uint8_t data_l while (!cc2500_has_data(dev)){ k_msleep(1); } - if (config->payload_crc && !cc2500_is_crc_ok(dev)) { + if (data->payload_crc && !cc2500_is_crc_ok(dev)) { LOG_WRN("Wrong CRC"); return -EIO; } @@ -591,6 +594,7 @@ static int cc2500_init(const struct device *dev) //uint8_t pa_data[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; uint8_t pa_data[] = {0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6}; const struct cc2500_config *config = dev->config; + struct cc2500_data *data = dev->data; uint8_t reg_value; int ret; @@ -611,7 +615,6 @@ static int cc2500_init(const struct device *dev) return(-EIO); } #ifdef CONFIG_CC2500_TRIGGER - struct cc2500_data *data = dev->data; uint8_t irq_mode; LOG_INF("Trigger config"); data->dev = dev; @@ -640,7 +643,7 @@ static int cc2500_init(const struct device *dev) /* Setup GPIO 0 or GPIO 2 as RX FIFO */ irq_mode = 0x00; - if (config->payload_crc) { + if (data->payload_crc) { /* IRQ on CRC OK */ irq_mode = 0x07; } @@ -676,14 +679,8 @@ static int cc2500_init(const struct device *dev) cc2500_flush_tx(dev); cc2500_idle(dev); - cc2500_write_register(dev, IOCFG2, 0x5C); - cc2500_write_register(dev, IOCFG0, 0x5B); - /* FIFO threshold */ - //cc2500_write_register(dev, FIFOTHR, 0x7); cc2500_cmd_register(dev, SFSTXON); - cc2500_rssi_process(dev); - return 0; } @@ -695,12 +692,15 @@ static int cc2500_init(const struct device *dev) .array = DT_INST_PROP_OR(i, conf_array, {}), \ .array_len = DT_INST_PROP_LEN_OR(i, conf_array, 0), \ .gpio2_as_irq = DT_INST_PROP_OR(i, use_gpio_2_as_irq, false), \ - .payload_crc = DT_INST_PROP_OR(i, payload_crc, true), \ IF_ENABLED(CONFIG_CC2500_TRIGGER, \ (.irq = GPIO_DT_SPEC_INST_GET(i, irq_gpios),)) \ }; \ \ static struct cc2500_data cc2500_##i = { \ + .channel_frequency = DT_INST_PROP(i, channel_frequency), \ + .start_frequency = DT_INST_PROP(i, start_frequency), \ + .modulation_format = DT_INST_PROP(i, modulation_format), \ + .payload_crc = DT_INST_PROP_OR(i, payload_crc, true) \ }; \ DEVICE_DT_INST_DEFINE(i, cc2500_init, NULL, &cc2500_##i, \ &cc2500_config_##i, POST_KERNEL, \ diff --git a/dts/bindings/propy_radio/nordic,nrf24l01.yaml b/dts/bindings/propy_radio/nordic,nrf24l01.yaml index 313842a..20efafc 100644 --- a/dts/bindings/propy_radio/nordic,nrf24l01.yaml +++ b/dts/bindings/propy_radio/nordic,nrf24l01.yaml @@ -35,7 +35,7 @@ properties: type: int required: true description: | - Channel selection, from 0 to 126. 0 is 2400MHz, each channel is 1MHz wide and 126 is 2526MHz. Default is 16. + Channel selection, from 0 to 126. 0 is 2400MHz. Max available frequency is 2483.5MHz. Each channel is 200kHz wide by default, and 126 is 2526MHz. Default is 16. default: 16 data-rate-2mbps: diff --git a/dts/bindings/propy_radio/ti,cc2500.yaml b/dts/bindings/propy_radio/ti,cc2500.yaml index 79e8b14..5e47488 100644 --- a/dts/bindings/propy_radio/ti,cc2500.yaml +++ b/dts/bindings/propy_radio/ti,cc2500.yaml @@ -20,18 +20,42 @@ properties: irq-gpios: type: phandle-array - required: false description: | - Chip parametric GPIO 0 or 2. Default is GPIO 0, use use-gpio-2-as-irq to select GPIO 2 instead. + Chip parametric GPIO 0 or 2. Default is GPIO 0, use use-gpio-2-as-irq to select GPIO 2 instead. Default as none. use-gpio-2-as-irq: type: boolean - required: false description: | - Use GPIO 2 instead of GPIO 0 as IRQ input pin. + Use GPIO 2 instead of GPIO 0 as IRQ input pin. Default false. payload-crc: type: boolean - required: false description: | Use payload CRC. Default true. + + start-frequency: + type: int + default: 2464 + description: | + Base frequency, center of the lowest channel to be selected by channel-frequency, in MHz. Default is 2464 MHz. + + channel-frequency: + type: int + description: | + Channel selection. Each channel is 200kHz wide by default, to be added to start-frequency. Default is 0. + default: 0 + + modulation-format: + type: int + description: | + Modulation format. Default is 2-FSK. + - 2-FSK + - GFSK + - OOK + - MSK + enum: + - "2-FSK" + - "GFSK" + - "OOK" + - "MSK" + default: 0