Spektrum RC Bind Issues after SDK Update
-
I've got an older Sentinel that shipped with Spektrum RC satellite receiver and some SDK pre v1.0.0 (I think it's SDK v0.8). It hasn't been used since we got it and I was setting up for first flight. I flashed the lastest SDK (1.6.3) and went through the set up procedure, calibrated it and flew it with the same Spektrum Transmitter I've used for some other Sentinels we've been flying more regularly.
I noticed after power cycling the vehicle and transmitter (Spektrum SPM9900), the Spektrum receiver and transmitter appear to bind automatically as expected (solid orange light on transmitter and receiver light up at same time when powered on), but px4 never gets the RC data (px4-listener input_rc returns never published) until I force them to rebind by running voxl-bind-spektrum -s and setting the transmitter in bind mode.
Does anyone know what could be causing this? I don't know enough about how the spektrum bind board (M0094) works, but reading through voxl-spektrum-bind.c I'm guessing this has something to do with the GPIO pin direction settings. Did the default settings change between SDK versions? I don't have this problem with other Sentinels running SDK 1.1
-
Ok so I've been comparing the Sentinel I have on an older SDK with no issues after power cycling with the one I just updated to the latest SDK and I noticed for the sentinel on the older SDK (1.1.2), the /sys/class/gpio only has the following
voxl2:~$ ls /sys/class/gpio/ export gpiochip1076 gpiochip1094 unexport gpiochip1072 gpiochip1085 gpiochip1100where the sentinel with the latest SDK shows:
sentinel (D0006):~$ ls /sys/class/gpio/ export gpio1152/ gpio1184/ gpio1213/ gpio1259/ gpio1100/ gpio1153/ gpio1185/ gpio1214/ gpiochip1072/ gpio1101/ gpio1154/ gpio1186/ gpio1224/ gpiochip1076/ gpio1136/ gpio1155/ gpio1187/ gpio1231/ gpiochip1085/ gpio1137/ gpio1156/ gpio1188/ gpio1252/ gpiochip1094/ gpio1148/ gpio1157/ gpio1189/ gpio1253/ gpiochip1100/ gpio1149/ gpio1167/ gpio1210/ gpio1254/ unexport gpio1150/ gpio1182/ gpio1211/ gpio1255/ gpio1151/ gpio1183/ gpio1212/ gpio1257/Then I ran voxl-bind-spektrum -ds on both and get nearly identical output, the SDK 1.6.3 the spektrum bind GPIO pin for M0154 is set even thought I'm on M0054
SDK 1.6.3:
sentinel (D0006):~$ voxl-bind-spektrum -ds Enabling debug mode Writing 1259 to /sys/class/gpio/export for gpio pin 1259 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1259 Writing 1259 to /sys/class/gpio/export for gpio pin 1259 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1259 Writing 1259 to /sys/class/gpio/export for gpio pin 1259 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1259 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1120 number of pulses: 7 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1120 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing in to /sys/class/gpio/gpio%d/direction for gpio pin 1146 read 0 from gpio pin 1146 Writing 1120 to /sys/class/gpio/export for gpio pin 1120 Writing in to /sys/class/gpio/gpio%d/direction for gpio pin 1120 read 0 from gpio pin 1120 An orange light should now be flashing on your receiver If so, your receiver is successfully in binding modeSDK 1.1.2
voxl2:~$ voxl-bind-spektrum -ds Enabling debug mode Writing 1259 to /sys/class/gpio/export for gpio pin 1259 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1259 Writing 1259 to /sys/class/gpio/export for gpio pin 1259 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1259 Writing 1259 to /sys/class/gpio/export for gpio pin 1259 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1259 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 number of pulses: 7 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 1 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing 0 to /sys/class/gpio/gpio%d/value for gpio pin 1146 Writing 1146 to /sys/class/gpio/export for gpio pin 1146 Writing in to /sys/class/gpio/gpio%d/direction for gpio pin 1146 read 0 from gpio pin 1146 An orange light should now be flashing on your receiver If so, your receiver is successfully in binding modeNow the SDK1.1.2 quad shows:
voxl2:~$ ls /sys/class/gpio/ export gpio1259 gpiochip1076 gpiochip1094 unexport gpio1146 gpiochip1072 gpiochip1085 gpiochip1100And SDK1.6.3:
sentinel (D0006):~$ ls /sys/class/gpio/ export gpio1148 gpio1155 gpio1185 gpio1212 gpio1254 gpiochip1094 gpio1100 gpio1149 gpio1156 gpio1186 gpio1213 gpio1255 gpiochip1100 gpio1101 gpio1150 gpio1157 gpio1187 gpio1214 gpio1257 unexport gpio1120 gpio1151 gpio1167 gpio1188 gpio1224 gpio1259 gpio1136 gpio1152 gpio1182 gpio1189 gpio1231 gpiochip1072 gpio1137 gpio1153 gpio1183 gpio1210 gpio1252 gpiochip1076 gpio1146 gpio1154 gpio1184 gpio1211 gpio1253 gpiochip1085The pin settings after running voxl-spektrum-bind are the same for both vehicles in /sys/class/gpio/gpio1146 and /sys/class/gpio/gpio1259. After power cycling I'm right back where I started, but the settings for gpio1259 persist on the v1.6.3 quad.
I'm guessing I need to do something with the settings for gpio pin 46 or 159 to fix this. What should the gpio pin settings be on boot for a VOXL2 vehicle with an already bound spektrum receiver? Is the problem that /sys/class/gpio/gpio1259 settings persist between power cycles? Where are all these gpio settings getting written to on boot?