ModalAI Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Spektrum RC Bind Issues after SDK Update

    Sentinel
    1
    3
    73
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      jmltt
      last edited by

      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

      1 Reply Last reply Reply Quote 0
      • J
        jmltt
        last edited by jmltt

        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  gpiochip1100
        

        where 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 mode
        

        SDK 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 mode
        

        Now the SDK1.1.2 quad shows:

        voxl2:~$ ls /sys/class/gpio/
        export    gpio1259      gpiochip1076  gpiochip1094  unexport
        gpio1146  gpiochip1072  gpiochip1085  gpiochip1100
        

        And 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  gpiochip1085
        

        The 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?

        1 Reply Last reply Reply Quote 0
        • J jmltt referenced this topic
        • J
          jmltt
          last edited by jmltt

          So I'm guessing this has to do with the following I noticed in the changelog:

          1.7.4
          (voxl2_SDK_1.1.3)

          BSP:

          • add voxl-fysnc-mod kernel module
          • add voxl-gpio-mod kernel module
            --- GPIO now exporting to /sys/class/gpio
          • convert SE13 from 4W to 2W UART, freeing GPIO36/37
          • add voxl-platform-mod kernel module
            --- see /sys/module/voxl_platform_mod/parameters
          • add new target 'M0054-2' support (same rootfs as M0054-1)
          • new kernel
          • new devcfg.mbn

          In system image 1.7.1 (SDK v1.1.2) on the drone that has no rc issues, recipes-kernel/linux-msm/files/dts/common/m0xxx-modalai-gpio.dtsi has:

          &soc {
          	b2b_conn_gpio_init {
          		compatible = "modalai,voxl-b2b";
          		pinctrl-names = "default";
          		pinctrl-0 = <&tck22912G_ctrl_pin &b2b_pin7 &b2b_pin9 &b2b_pin17 &b2b_pin19 &b2b_pin38 &b2b_pin40 &hs_b2b_pin41 &hs_b2b_pin42 &hs_b2b_pin43 &hs_b2b_pin44 &hs_b2b_pin46 &hs_b2b_pin47 &hs_b2b_pin50 &hs_b2b_pin51 &hs_b2b_pin78 &hs_b2b_pin79 &hs_b2b_pin80 &hs_b2b_pin81 &hs_b2b_pin82 &j10_lvl_shf_ctrl_pin>;
          		status = "ok";
          	};
          
          	rc_in_enable_init {
          		compatible = "modalai,voxl-rc-in";
          		pinctrl-names = "default";
          		pinctrl-0 = <&rc_in_3v3_en_pin>;
          		status = "ok";
          	};
          };
          

          In image 1.7.4 (SDK 1.1.3), recipes-kernel/linux-msm/files/dts/common/m0xxx-modalai-gpio.dtsi:

          &soc {
          	voxl_gpio {
          		compatible = "modalai,voxl-gpio";
          		pinctrl-names = "default";
          		pinctrl-0 = <&tck22912G_ctrl_pin 
          			&b2b_pin7 &b2b_pin9 &b2b_pin17 &b2b_pin19 &b2b_pin38 &b2b_pin40 
          			&hs_b2b_pin41 &hs_b2b_pin42 &hs_b2b_pin43 &hs_b2b_pin44 &hs_b2b_pin46 &hs_b2b_pin47 &hs_b2b_pin50 &hs_b2b_pin51 &hs_b2b_pin78 &hs_b2b_pin79 &hs_b2b_pin80 &hs_b2b_pin81 &hs_b2b_pin82 &hs_b2b_pin95 &hs_b2b_pin96
          			&j10_lvl_shf_ctrl_pin &rc_in_3v3_en_pin &ds2_led_red &ds2_led_green &ds2_led_blue &id_som_1 &id_som_2 &id_mai_3 &id_mai_4>;
          		
          		modalai,gpio-init-output-high = <0 1 53 56 57 85 86 87 88 89 124 152 157 159>;
          		modalai,gpio-init-output-low = <36 37 46 54 55 67 82 83 84 131 153 154 155>;
          		modalai,gpio-init-input = <48 49 50 51 52>;
          		
          		status = "ok";
          	};
          
          	voxl_fsync {
          		compatible = "modalai,voxl-fsync";
          		pinctrl-names = "default";
          		pinctrl-0 = <&camera_sync_110 &camera_sync_111 &camera_sync_112 &camera_sync_113 &camera_sync_114>;
          		
          		status = "ok";
          	};
          };
          

          And then in image 1.8.06 (SDK v1.6.3) that is on the drone with the bind issues, recipes-kernel/linux-msm/files/dts/common/m0xxx-modalai-gpio.dtsi:

          &soc {
          	voxl_gpio {
          		compatible = "modalai,voxl-gpio";
          		pinctrl-names = "default";
          		pinctrl-0 = <&tck22912G_ctrl_pin 
          			&b2b_pin7 &b2b_pin9 &b2b_pin17 &b2b_pin19 &b2b_pin38 &b2b_pin40 
          			&hs_b2b_pin41 &hs_b2b_pin42 &hs_b2b_pin43 &hs_b2b_pin44 &hs_b2b_pin46 &hs_b2b_pin47 &hs_b2b_pin50 &hs_b2b_pin51 &hs_b2b_pin78 &hs_b2b_pin79 &hs_b2b_pin80 &hs_b2b_pin81 &hs_b2b_pin82 &hs_b2b_pin95 &hs_b2b_pin96
          			&j10_lvl_shf_ctrl_pin &rc_in_3v3_en_pin &ds2_led_red &ds2_led_green &ds2_led_blue &id_som_1 &id_som_2 &id_mai_3 &id_mai_4
          			&camera_sync_110 &camera_sync_111 &camera_sync_112 &camera_sync_113 &camera_sync_114>;
          		
          		modalai,gpio-init-output-high = <0 1 53 56 57 67 85 86 87 88 89 124 152 157 159>;
          		modalai,gpio-init-output-low = <36 37 54 55 82 83 84 131 153 154 155>;
          		modalai,gpio-init-input = <48 49 50 51 52 110 111 112 113 114>;
          		
          		status = "ok";
          	};
          
          	voxl_fsync {
          		compatible = "modalai,voxl-fsync";
          		pinctrl-names = "default";
          		
          		status = "ok";
          	};
          };
          

          So the gpio initialization process changed and rc_in_enable_init was removed between SDK v1.1.2 and v1.1.3, and between SDK v1.1.3 and v1.6.3, GPIO pin 67 got moved from modalai,gpio-init-output-low to modalai,gpio-init-output-high and GPIO pin 46 got removed from modalai,gpio-init-output-low.

          https://gitlab.com/voxl-public/system-image-build/meta-voxl2-bsp/-/commit/538c324713548174c8c1694680e9cba7f2d47bcb

          https://gitlab.com/voxl-public/system-image-build/meta-voxl2-bsp/-/commit/ccd3893e062b03d05885da5a279be2f8d2f6c97c

          Idk which change is responsible for the binding issues. I'd like to avoid flashing v1.1.3 to narrow it down. Can someone explain how the pins are meant to function for my set-up (M0094 + M0054, rc already bound)?

          1 Reply Last reply Reply Quote 0
          • First post
            Last post
          Powered by NodeBB | Contributors