浏览代码

Re-enable dynamic packet length

The nrf24l01 used on the boards is probably a counterfeit chip. It
cannot acknowledge received packets (probably a bit flip of the NO_ACK
bit described here:
https://ncrmnt.org/2015/03/13/how-do-i-cost-optimize-nrf24l01/) if the
dynamic packet length is disabled.
Bernd Gottschlag 5 年前
父节点
当前提交
1a527b5929
共有 1 个文件被更改,包括 23 次插入1 次删除
  1. 23
    1
      weather-sensor/firmware/nrf24l01.c

+ 23
- 1
weather-sensor/firmware/nrf24l01.c 查看文件

64
 
64
 
65
 void Configure_Transmission(uint8_t moduleId)
65
 void Configure_Transmission(uint8_t moduleId)
66
 {
66
 {
67
-	DYNPD_REGISTER dyndpRegisterContents = {.byte = 0x0};
68
 	SETUP_RETR_REGISTER setupRetrRegisterContents = {.byte = 0x0};
67
 	SETUP_RETR_REGISTER setupRetrRegisterContents = {.byte = 0x0};
68
+	EN_RXADDR_REGISTER enableRxAddressesRegisterContents = {.byte = 0x0};
69
+	RX_PW_Pn_REGISTER rxPwPnRegisterContents = {.byte = 0x0};
70
+	EN_AA_REGISTER enAaRegister = {.byte = 0x0};
71
+	FEATURE_REGISTER featureRegisterContents = {.byte = 0x0};
72
+	DYNPD_REGISTER dyndpRegisterContents = {.byte = 0x0};
69
 
73
 
70
 	uint8_t txAddress[5] = {0xB3, 0xB3, 0xB3, 0xB3, 0x00};
74
 	uint8_t txAddress[5] = {0xB3, 0xB3, 0xB3, 0xB3, 0x00};
71
 	uint8_t rx0Address[5] = {0xB3, 0xB3, 0xB3, 0xB3, 0x00};
75
 	uint8_t rx0Address[5] = {0xB3, 0xB3, 0xB3, 0xB3, 0x00};
94
 	/* Set the frequency to 1450 MHz */
98
 	/* Set the frequency to 1450 MHz */
95
 	Write_NRF_Register(RF_CH_ADDRESS, 0x32);
99
 	Write_NRF_Register(RF_CH_ADDRESS, 0x32);
96
 
100
 
101
+	/* Enable dynamic payload length */
102
+	Send_Activate_Command();
103
+	featureRegisterContents.bits.EN_DPL = 1; // enable dynamic payload length
104
+	Write_NRF_Register(FEATURE_ADDRESS, featureRegisterContents.byte);
105
+
106
+	/* set dynamic payload length for all data pipes
107
+	 * When the dynamic payload length is not set the module cannot receive packets from some
108
+	 * stations. This is probably due to counterfeit NRF24L01+ chips.
109
+	 */
110
+	dyndpRegisterContents.bits.DPL_P0 = 1;
111
+	dyndpRegisterContents.bits.DPL_P1 = 1;
112
+	dyndpRegisterContents.bits.DPL_P2 = 1;
113
+	dyndpRegisterContents.bits.DPL_P3 = 1;
114
+	dyndpRegisterContents.bits.DPL_P4 = 1;
115
+	dyndpRegisterContents.bits.DPL_P5 = 1;
116
+	Write_NRF_Register(DYNPD_ADDRESS, dyndpRegisterContents.byte);
117
+
118
+	/* Set up the auto retries */
97
 
119
 
98
 	/* */
120
 	/* */
99
 	setupRetrRegisterContents.bits.ARC = 0x3;
121
 	setupRetrRegisterContents.bits.ARC = 0x3;

正在加载...
取消
保存