Merge pull request #10429 from iNavFlight/mmosca-patch-4
[inav.git] / docs / 1wire.md
blob94094637cee6fe61862061abc57a3fb3595b108f
1 # 1-wire passthrough esc programming
3 ### ESCs must have the BlHeli Bootloader.
5 If your ESCs didn't come with BlHeli Bootloader, you'll need to flash them with an ArduinoISP programmer first. [Here's a guide](http://bit.ly/blheli-f20).
7 This is the option you need to select for the bootloader:
9 ![Flashing BlHeli Bootloader](assets/images/blheli-bootloader.png)
11 Currently supported on all boards with at least 128kB of flash memory (all F3, F4 and F7).
13 ## Usage
15   - Plug in the USB cable and connect to your board with the INAV configurator.
17   - Open the BlHeli Suite.
19   - Ensure you have selected the correct Atmel or SILABS "Cleanflight" option under the "Select ATMEL / SILABS Interface" menu option.
21   - Ensure you have port for your external USB/UART adapter selected, if you're using one, otherwise pick the same COM port that you normally use for INAV.
23   - Click "Connect" and wait for the connection to complete. If you get a COM error, hit connect again. It will probably work.
25   - Use the boxes at the bottom to select the ESCs you have connected. Note that the boxes correspond directly to the ports on your flight controller. For example if you have motors on ports 1-4, pick boxes 1-4 or in the case of a tri-copter that uses motors on ports 3, 4 and 5, select those ports in BlHeli.
27   - Click "Read Setup"
29   - Use BlHeli suite as normal.
31   - When you're finished with one ESC, click "Disconnect"
33 ## Implementing and Configuring targets
35 The following parameters can be used to enable and configure this in the related target.h file:
37     USE_SERIAL_1WIRE              Enables the 1wire code, defined in target.h
40   - For new targets
42     - in `target.h`
44         ```
45         // Turn on serial 1wire passthrough
46         #define USE_SERIAL_1WIRE
47         // How many escs does this board support?
48         #define ESC_COUNT 6
49         // STM32F3DISCOVERY TX - PC3 connects to UART RX
50         #define S1W_TX_GPIO         GPIOC
51         #define S1W_TX_PIN          GPIO_Pin_3
52         // STM32F3DISCOVERY RX - PC1 connects to UART TX
53         #define S1W_RX_GPIO         GPIOC
54         #define S1W_RX_PIN          GPIO_Pin_1
55         ```
57     - in `serial_1wire.c`
59        ```
60        // Define your esc hardware
61        #if defined(STM32F3DISCOVERY)
62        const escHardware_t escHardware[ESC_COUNT] = {
63          { GPIOD, 12 },
64          { GPIOD, 13 },
65          { GPIOD, 14 },
66          { GPIOD, 15 },
67          { GPIOA, 1 },
68          { GPIOA, 2 }
69        };
70        ```
72 ## Development Notes
74 On the STM32F3DISCOVERY, an external pullup on the ESC line may be necessary. I needed a 3v, 4.7k pullup.