diff --git a/src/energenie/drv/hrf69.h b/src/energenie/drv/hrf69.h index a5b6aa3..fd26cac 100644 --- a/src/energenie/drv/hrf69.h +++ b/src/energenie/drv/hrf69.h @@ -22,94 +22,94 @@ // Register addresses -#define HRF_ADDR_FIFO = 0x00 -#define HRF_ADDR_OPMODE = 0x01 -#define HRF_ADDR_REGDATAMODUL = 0x02 -#define HRF_ADDR_BITRATEMSB = 0x03 -#define HRF_ADDR_BITRATELSB = 0x04 -#define HRF_ADDR_FDEVMSB = 0x05 -#define HRF_ADDR_FDEVLSB = 0x06 -#define HRF_ADDR_FRMSB = 0x07 -#define HRF_ADDR_FRMID = 0x08 -#define HRF_ADDR_FRLSB = 0x09 -#define HRF_ADDR_AFCCTRL = 0x0B -#define HRF_ADDR_LNA = 0x18 -#define HRF_ADDR_RXBW = 0x19 -#define HRF_ADDR_AFCFEI = 0x1E -#define HRF_ADDR_IRQFLAGS1 = 0x27 -#define HRF_ADDR_IRQFLAGS2 = 0x28 -#define HRF_ADDR_RSSITHRESH = 0x29 -#define HRF_ADDR_PREAMBLELSB = 0x2D -#define HRF_ADDR_SYNCCONFIG = 0x2E -#define HRF_ADDR_SYNCVALUE1 = 0x2F -#define HRF_ADDR_SYNCVALUE2 = 0x30 -#define HRF_ADDR_SYNCVALUE3 = 0x31 -#define HRF_ADDR_SYNCVALUE4 = 0x32 -#define HRF_ADDR_PACKETCONFIG1 = 0x37 -#define HRF_ADDR_PAYLOADLEN = 0x38 -#define HRF_ADDR_NODEADDRESS = 0x39 -#define HRF_ADDR_FIFOTHRESH = 0x3C +#define HRF_ADDR_FIFO 0x00 +#define HRF_ADDR_OPMODE 0x01 +#define HRF_ADDR_REGDATAMODUL 0x02 +#define HRF_ADDR_BITRATEMSB 0x03 +#define HRF_ADDR_BITRATELSB 0x04 +#define HRF_ADDR_FDEVMSB 0x05 +#define HRF_ADDR_FDEVLSB 0x06 +#define HRF_ADDR_FRMSB 0x07 +#define HRF_ADDR_FRMID 0x08 +#define HRF_ADDR_FRLSB 0x09 +#define HRF_ADDR_AFCCTRL 0x0B +#define HRF_ADDR_LNA 0x18 +#define HRF_ADDR_RXBW 0x19 +#define HRF_ADDR_AFCFEI 0x1E +#define HRF_ADDR_IRQFLAGS1 0x27 +#define HRF_ADDR_IRQFLAGS2 0x28 +#define HRF_ADDR_RSSITHRESH 0x29 +#define HRF_ADDR_PREAMBLELSB 0x2D +#define HRF_ADDR_SYNCCONFIG 0x2E +#define HRF_ADDR_SYNCVALUE1 0x2F +#define HRF_ADDR_SYNCVALUE2 0x30 +#define HRF_ADDR_SYNCVALUE3 0x31 +#define HRF_ADDR_SYNCVALUE4 0x32 +#define HRF_ADDR_PACKETCONFIG1 0x37 +#define HRF_ADDR_PAYLOADLEN 0x38 +#define HRF_ADDR_NODEADDRESS 0x39 +#define HRF_ADDR_FIFOTHRESH 0x3C // Masks to set and clear bits -#define HRF_MASK_REGDATAMODUL_OOK = 0x08 -#define HRF_MASK_REGDATAMODUL_FSK = 0x00 -#define HRF_MASK_WRITE_DATA = 0x80 -#define HRF_MASK_MODEREADY = 0x80 -#define HRF_MASK_FIFONOTEMPTY = 0x40 -#define HRF_MASK_FIFOLEVEL = 0x20 -#define HRF_MASK_FIFOOVERRUN = 0x10 -#define HRF_MASK_PACKETSENT = 0x08 -#define HRF_MASK_TXREADY = 0x20 -#define HRF_MASK_PACKETMODE = 0x60 -#define HRF_MASK_MODULATION = 0x18 -#define HRF_MASK_PAYLOADRDY = 0x04 +#define HRF_MASK_REGDATAMODUL_OOK 0x08 +#define HRF_MASK_REGDATAMODUL_FSK 0x00 +#define HRF_MASK_WRITE_DATA 0x80 +#define HRF_MASK_MODEREADY 0x80 +#define HRF_MASK_FIFONOTEMPTY 0x40 +#define HRF_MASK_FIFOLEVEL 0x20 +#define HRF_MASK_FIFOOVERRUN 0x10 +#define HRF_MASK_PACKETSENT 0x08 +#define HRF_MASK_TXREADY 0x20 +#define HRF_MASK_PACKETMODE 0x60 +#define HRF_MASK_MODULATION 0x18 +#define HRF_MASK_PAYLOADRDY 0x04 // Radio modes -#define HRF_MODE_STANDBY = 0x04 // Standby -#define HRF_MODE_TRANSMITER = 0x0C // Transmiter -#define HRF_MODE_RECEIVER = 0x10 // Receiver +#define HRF_MODE_STANDBY 0x04 // Standby +#define HRF_MODE_TRANSMITER 0x0C // Transmiter +#define HRF_MODE_RECEIVER 0x10 // Receiver // Values to store in registers //TODO some of these are energenie radio config specific -#define HRF_VAL_REGDATAMODUL_FSK = 0x00 // Modulation scheme FSK -#define HRF_VAL_REGDATAMODUL_OOK = 0x08 // Modulation scheme OOK -#define HRF_VAL_FDEVMSB30 = 0x01 // frequency deviation 5kHz 0x0052 -> 30kHz 0x01EC -#define HRF_VAL_FDEVLSB30 = 0xEC // frequency deviation 5kHz 0x0052 -> 30kHz 0x01EC -#define HRF_VAL_FRMSB434 = 0x6C // carrier freq -> 434.3MHz 0x6C9333 -#define HRF_VAL_FRMID434 = 0x93 // carrier freq -> 434.3MHz 0x6C9333 -#define HRF_VAL_FRLSB434 = 0x33 // carrier freq -> 434.3MHz 0x6C9333 -#define HRF_VAL_FRMSB433 = 0x6C // carrier freq -> 433.92MHz 0x6C7AE1 -#define HRF_VAL_FRMID433 = 0x7A // carrier freq -> 433.92MHz 0x6C7AE1 -#define HRF_VAL_FRLSB433 = 0xE1 // carrier freq -> 433.92MHz 0x6C7AE1 -#define HRF_VAL_AFCCTRLS = 0x00 // standard AFC routine -#define HRF_VAL_AFCCTRLI = 0x20 // improved AFC routine -#define HRF_VAL_LNA50 = 0x08 // LNA input impedance 50 ohms -#define HRF_VAL_LNA50G = 0x0E // LNA input impedance 50 ohms, LNA gain -> 48db -#define HRF_VAL_LNA200 = 0x88 // LNA input impedance 200 ohms -#define HRF_VAL_RXBW60 = 0x43 // channel filter bandwidth 10kHz -> 60kHz page:26 -#define HRF_VAL_RXBW120 = 0x41 // channel filter bandwidth 120kHz -#define HRF_VAL_AFCFEIRX = 0x04 // AFC is performed each time RX mode is entered +#define HRF_VAL_REGDATAMODUL_FSK 0x00 // Modulation scheme FSK +#define HRF_VAL_REGDATAMODUL_OOK 0x08 // Modulation scheme OOK +#define HRF_VAL_FDEVMSB30 0x01 // frequency deviation 5kHz 0x0052 -> 30kHz 0x01EC +#define HRF_VAL_FDEVLSB30 0xEC // frequency deviation 5kHz 0x0052 -> 30kHz 0x01EC +#define HRF_VAL_FRMSB434 0x6C // carrier freq -> 434.3MHz 0x6C9333 +#define HRF_VAL_FRMID434 0x93 // carrier freq -> 434.3MHz 0x6C9333 +#define HRF_VAL_FRLSB434 0x33 // carrier freq -> 434.3MHz 0x6C9333 +#define HRF_VAL_FRMSB433 0x6C // carrier freq -> 433.92MHz 0x6C7AE1 +#define HRF_VAL_FRMID433 0x7A // carrier freq -> 433.92MHz 0x6C7AE1 +#define HRF_VAL_FRLSB433 0xE1 // carrier freq -> 433.92MHz 0x6C7AE1 +#define HRF_VAL_AFCCTRLS 0x00 // standard AFC routine +#define HRF_VAL_AFCCTRLI 0x20 // improved AFC routine +#define HRF_VAL_LNA50 0x08 // LNA input impedance 50 ohms +#define HRF_VAL_LNA50G 0x0E // LNA input impedance 50 ohms, LNA gain -> 48db +#define HRF_VAL_LNA200 0x88 // LNA input impedance 200 ohms +#define HRF_VAL_RXBW60 0x43 // channel filter bandwidth 10kHz -> 60kHz page:26 +#define HRF_VAL_RXBW120 0x41 // channel filter bandwidth 120kHz +#define HRF_VAL_AFCFEIRX 0x04 // AFC is performed each time RX mode is entered //TODO: These might be energenie config specific -#define HRF_VAL_RSSITHRESH220 = 0xDC // RSSI threshold 0xE4 -> 0xDC (220) -#define HRF_VAL_PREAMBLELSB3 = 0x03 // preamble size LSB 3 -#define HRF_VAL_PREAMBLELSB5 = 0x05 // preamble size LSB 5 -#define HRF_VAL_SYNCCONFIG2 = 0x88 // Size of the Synch word = 2 (SyncSize + 1) -#define HRF_VAL_SYNCCONFIG4 = 0x98 // Size of the Synch word = 4 (SyncSize + 1) -#define HRF_VAL_SYNCVALUE1FSK = 0x2D // 1st byte of Sync word -#define HRF_VAL_SYNCVALUE2FSK = 0xD4 // 2nd byte of Sync word -#define HRF_VAL_SYNCVALUE1OOK = 0x80 // 1nd byte of Sync word -#define HRF_VAL_PACKETCONFIG1FSK = 0xA2 // Variable length, Manchester coding, Addr must match NodeAddress -#define HRF_VAL_PACKETCONFIG1FSKNO = 0xA0 // Variable length, Manchester coding -#define HRF_VAL_PACKETCONFIG1OOK = 0 // Fixed length, no Manchester coding -#define HRF_VAL_PAYLOADLEN255 = 0xFF // max Length in RX, not used in Tx -#define HRF_VAL_PAYLOADLEN66 = 66 // max Length in RX, not used in Tx -#define HRF_VAL_PAYLOADLEN_OOK = (13 + 8 * 17) // Payload Length -#define HRF_VAL_NODEADDRESS01 = 0x01 // Node address used in address filtering -#define HRF_VAL_NODEADDRESS04 = 0x04 // Node address used in address filtering -#define HRF_VAL_FIFOTHRESH1 = 0x81 // Condition to start packet transmission: at least one byte in FIFO -#define HRF_VAL_FIFOTHRESH30 = 0x1E // Condition to start packet transmission: wait for 30 bytes in FIFO +#define HRF_VAL_RSSITHRESH220 0xDC // RSSI threshold 0xE4 -> 0xDC (220) +#define HRF_VAL_PREAMBLELSB3 0x03 // preamble size LSB 3 +#define HRF_VAL_PREAMBLELSB5 0x05 // preamble size LSB 5 +#define HRF_VAL_SYNCCONFIG2 0x88 // Size of the Synch word = 2 (SyncSize + 1) +#define HRF_VAL_SYNCCONFIG4 0x98 // Size of the Synch word = 4 (SyncSize + 1) +#define HRF_VAL_SYNCVALUE1FSK 0x2D // 1st byte of Sync word +#define HRF_VAL_SYNCVALUE2FSK 0xD4 // 2nd byte of Sync word +#define HRF_VAL_SYNCVALUE1OOK 0x80 // 1nd byte of Sync word +#define HRF_VAL_PACKETCONFIG1FSK 0xA2 // Variable length, Manchester coding, Addr must match NodeAddress +#define HRF_VAL_PACKETCONFIG1FSKNO 0xA0 // Variable length, Manchester coding +#define HRF_VAL_PACKETCONFIG1OOK 0 // Fixed length, no Manchester coding +#define HRF_VAL_PAYLOADLEN255 0xFF // max Length in RX, not used in Tx +#define HRF_VAL_PAYLOADLEN66 66 // max Length in RX, not used in Tx +#define HRF_VAL_PAYLOADLEN_OOK (13 + 8 * 17) // Payload Length +#define HRF_VAL_NODEADDRESS01 0x01 // Node address used in address filtering +#define HRF_VAL_NODEADDRESS04 0x04 // Node address used in address filtering +#define HRF_VAL_FIFOTHRESH1 0x81 // Condition to start packet transmission: at least one byte in FIFO +#define HRF_VAL_FIFOTHRESH30 0x1E // Condition to start packet transmission: wait for 30 bytes in FIFO extern void HRF_writereg(uint8_t addr, uint8_t data); diff --git a/src/energenie/drv/hrf69_test.c b/src/energenie/drv/hrf69_test.c index b45f1f2..b571360 100644 --- a/src/energenie/drv/hrf69_test.c +++ b/src/energenie/drv/hrf69_test.c @@ -72,18 +72,24 @@ extern void gpio_mock_set_in(uint8_t g, uint8_t v); +// write a register and read it back + void hrf_test_connect(void) { uint8_t result; - // can we reset the HRF, and read a register from it? - reset(); gpio_mock_set_in(MISO, 1); // force return bus high to test - + printf("** write:%02X\n", (unsigned int) HRF_MODE_TRANSMITER); + HRF_writereg(HRF_ADDR_OPMODE, HRF_MODE_TRANSMITER); result = HRF_readreg(0x00); - printf("result:0x%02X\n", (unsigned int) result); + printf("** read:%02X\n", (unsigned int) result); + + printf("** write:%02X\n", (unsigned int) HRF_MODE_RECEIVER); + HRF_writereg(HRF_ADDR_OPMODE, HRF_MODE_RECEIVER); + result = HRF_readreg(0x00); + printf("** read:%02X\n", (unsigned int) result); spi_finished(); }