hwdef.dat 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. # The X2.1-777 is a member of the X2.1 flight controller from Mayan Robotics (mRo)
  2. # Introduced in October 2018
  3. # Designed by Nick Arsov, Phillip Kocmoud, and Jordi Munoz
  4. # with a STM32F777VIT6 MCU
  5. # and STM32F103C8T6 IO MCU
  6. # MCU class and specific type
  7. MCU STM32F7xx STM32F777xx
  8. # we set a specific HAL_BOARD_SUBTYPE, allowing for custom config in
  9. # drivers. For this to be used the subtype needs to be added to
  10. # AP_HAL/AP_HAL_Boards.h as well
  11. define CONFIG_HAL_BOARD_SUBTYPE HAL_BOARD_SUBTYPE_CHIBIOS_FMUV3
  12. # Set Proper Sensor Orientation
  13. define BOARD_TYPE_DEFAULT 20
  14. # now we need to specify the APJ_BOARD_ID. This is the ID that the
  15. # bootloader presents to GCS software so it knows if this firmware is
  16. # suitable for the board. Please see
  17. # https://github.com/ArduPilot/Bootloader/blob/master/hw_config.h for
  18. # a list of current board IDs. If you add a new board type then please
  19. # get it added to that repository so we don't get conflicts.
  20. # Note that APJ is "ArduPilot JSON Firmware Format"
  21. # crystal frequency
  22. OSCILLATOR_HZ 24000000
  23. define STM32_LSECLK 32768U
  24. define STM32_LSEDRV (3U << 3U)
  25. define STM32_PLLSRC STM32_PLLSRC_HSE
  26. define STM32_PLLM_VALUE 24
  27. define STM32_PLLN_VALUE 432
  28. define STM32_PLLP_VALUE 2
  29. define STM32_PLLQ_VALUE 9
  30. # board ID for firmware load
  31. APJ_BOARD_ID 136
  32. # on some boards you will need to also set the various PLL values. See
  33. # the defaults in common/mcuconf.h, and use the define mechanism
  34. # explained later in this file to override values suitable for your
  35. # board. Refer to your MCU datasheet or examples from supported boards
  36. # in ChibiOS for the right values.
  37. # now define the voltage the MCU runs at. This is needed for ChibiOS
  38. # to set various internal driver limits. It is in 0.01 volt units
  39. # board voltage
  40. STM32_VDD 330U
  41. # this is the STM32 timer that ChibiOS will use for the low level
  42. # driver. This must be a 32 bit timer. We currently only support
  43. # timers 2, 3, 4, 5 and 21. See hal_st_lld.c in ChibiOS for details
  44. # ChibiOS system timer
  45. STM32_ST_USE_TIMER 5
  46. # now the size of flash in kilobytes, for creating the ld.script
  47. # flash size
  48. FLASH_SIZE_KB 2048
  49. env OPTIMIZE -O2
  50. # now define which UART is used for printf(). We rarely use printf()
  51. # in ChibiOS, so this is really only for debugging very early startup
  52. # in drivers.
  53. # serial port for stdout. This is optional. If you leave it out then
  54. # output from printf() lines will be thrown away (you can stil use
  55. # hal.console->printf() for the ArduPilot console, which is the first
  56. # UART in the UART_ORDER list). The value for STDOUT_SERIAL is a
  57. # serial device name, and must be for a serial device for which pins
  58. # are defined in this file. For example, SD7 is for UART7 (SD7 ==
  59. # "serial device 7" in ChibiOS).
  60. STDOUT_SERIAL SD7
  61. STDOUT_BAUDRATE 57600
  62. # now the USB setup, if you have USB. All of these settings are
  63. # option, and the ones below are the defaults. It ends up creating a
  64. # USB ID on Linux like this:
  65. # /dev/serial/by-id/usb-ArduPilot_fmuv3_3E0031000B51353233343932-if00
  66. # if creating a board for a RTF vehicle you may wish to customise these
  67. # USB setup
  68. USB_VENDOR 0x0483 # ST
  69. USB_PRODUCT 0x5740
  70. USB_STRING_MANUFACTURER "mRo"
  71. USB_STRING_PRODUCT "mRoX21-777"
  72. USB_STRING_SERIAL "%SERIAL%"
  73. # now define the order that I2C buses are presented in the hal.i2c API
  74. # in ArduPilot. For historical reasons inherited from HAL_PX4 the
  75. # 'external' I2C bus should be bus 1 in hal.i2c, and internal I2C bus
  76. # should be bus 0. On fmuv3 the STM32 I2C1 is our external bus and
  77. # I2C2 is our internal bus, so we need to setup the order as I2C2
  78. # followed by I2C1 in order to achieve the conventional order that
  79. # drivers expect
  80. # order of I2C buses
  81. I2C_ORDER I2C1
  82. # now the UART order. These map to the hal.uartA to hal.uartF
  83. # objects. If you use a shorter list then HAL_Empty::UARTDriver
  84. # objects are substituted for later UARTs, or you can leave a gap by
  85. # listing one or more of the uarts as EMPTY
  86. # the normal usage of this ordering is:
  87. # 1) SERIAL0: console (primary mavlink, usually USB)
  88. # 2) SERIAL3: primary GPS
  89. # 3) SERIAL1: telem1
  90. # 4) SERIAL2: telem2
  91. # 5) SERIAL4: GPS2
  92. # 6) SERIAL5: extra UART (usually RTOS debug console)
  93. # order of UARTs (and USB)
  94. UART_ORDER OTG1 UART4 USART2 USART3 UART8 UART7 OTG2
  95. # default the 2nd interface to MAVLink2 until MissionPlanner updates drivers
  96. define HAL_OTG2_PROTOCOL SerialProtocol_MAVLink2
  97. # if the board has an IOMCU connected via a UART then this defines the
  98. # UART to talk to that MCU. Leave it out for boards with no IOMCU
  99. # UART for IOMCU
  100. IOMCU_UART USART6
  101. # now we start on the pin definitions. Every pin used by ArduPilot
  102. # needs to be in this file. The format is P+port+pin. So PC4 is portC
  103. # pin4. For every pin the 2nd colum is the label. If this is a
  104. # peripheral that has an alternate function defined in the STM32
  105. # datasheet then the label must be the name of that alternative
  106. # function. The names are looked up in the python database for this
  107. # MCU. Please see STM32F427xx.py for the F427 database. That database
  108. # is used to automatically fill in the alternative function (and later
  109. # for the DMA channels).
  110. # The third column is the peripheral type. This must be one of the
  111. # following: UARTn, USARTn, OTGn, SPIn, I2Cn, ADCn, TIMn, SWD, SDIO,
  112. # INPUT, OUTPUT, CS
  113. # the fourth and later columns are for modifiers on the pin. The
  114. # possible modifiers are
  115. # pin speed: SPEED_VERYLOW, SPEED_LOW, SPEED_MEDIUM, SPEED_HIGH
  116. # pullup: PULLUP, PULLDOWN, FLOATING
  117. # out type: OPENDRAIN, PUSHPULL
  118. # default value: LOW, HIGH
  119. # Additionally, each class of pin peripheral can have extra modifiers
  120. # suitable for that pin type. For example, for an OUTPUT you can map
  121. # it to a GPIO number in hal.gpio using the GPIO(n) modifier. For ADC
  122. # inputs you can apply a scaling factor (to bring it to unit volts)
  123. # using the SCALE(x) modifier. See the examples below for more
  124. # modifiers, or read the python code in chibios_hwdef.py
  125. # now we define UART4 which is for the GPS, which is a GPS. Be careful
  126. # of the difference between USART and UART. Check the STM32F427xx.py
  127. # if unsure which it is. For a UART we need to specify at least TX and
  128. # RX pins.
  129. # this pins in this file can be defined in any order.
  130. # UART4 serial GPS
  131. PA0 UART4_TX UART4
  132. PA1 UART4_RX UART4
  133. # now define the primary battery connectors. The labels we choose hear
  134. # are used to create defines for pins in the various drivers, so
  135. # choose names that match existing board setups where possible. Here
  136. # we define two pins PA2 and PA3 for voltage and current sensing, with
  137. # a scale factor of 1.0 and connected on ADC1. The pin number this
  138. # maps to in hal.adc is automatically determined using the datasheet
  139. # tables in STM32F427xx.py
  140. PA2 BATT_VOLTAGE_SENS ADC1 SCALE(1)
  141. PA3 BATT_CURRENT_SENS ADC1 SCALE(1)
  142. # now the VDD sense pin. This is used to sense primary board voltags
  143. PA4 VDD_5V_SENS ADC1 SCALE(2)
  144. # now the first SPI bus. At minimum you need SCK, MISO and MOSI pin
  145. definitions. You can add speed modifiers if you want them, otherwise
  146. the defaults for the peripheral class are used.
  147. PA5 SPI1_SCK SPI1
  148. PA6 SPI1_MISO SPI1
  149. PA7 SPI1_MOSI SPI1
  150. # this defines an output pin which will default to output LOW. It is a
  151. # pin that enables peripheral power on this board
  152. PA8 VDD_5V_PERIPH_EN OUTPUT LOW
  153. # this is the pin that senses USB being connected. It is an input pin
  154. # setup as OPENDRAIN
  155. PA9 VBUS INPUT OPENDRAIN
  156. # this is a commented out pin for talking to the debug uart on the
  157. # IOMCU, not used yet, but left as a comment (with a '#' in front) for
  158. # future reference
  159. # PA10 IO-debug-console
  160. # now we define the pins that USB is connected on
  161. PA11 OTG_FS_DM OTG1
  162. PA12 OTG_FS_DP OTG1
  163. # these are the pins for SWD debugging with a STlinkv2 or black-magic probe
  164. PA13 JTMS-SWDIO SWD
  165. PA14 JTCK-SWCLK SWD
  166. # this defines the PWM pin for the buzzer (if there is one). It is
  167. # also mapped to a GPIO output so you can play with the buzzer via
  168. # MAVLink relay commands if you want to
  169. # PWM output for buzzer
  170. PA15 TIM2_CH1 TIM2 GPIO(77) ALARM
  171. # this defines a couple of general purpose outputs, mapped to GPIO
  172. # numbers 1 and 2 for users
  173. PB10 EXTERN_GPIO1 OUTPUT GPIO(1) #Kill
  174. # PB1 EXTERN_GPIO2 OUTPUT GPIO(2) #Not Connected
  175. # this defines some input pins, currently unused
  176. # PB2 BOOT1 INPUT
  177. # PB3 FMU_SW0 INPUT
  178. # this defines the pins for the 2nd CAN interface, if available
  179. # PB6 CAN2_TX CAN2 #Not Connected
  180. # PB12 CAN2_RX CAN2 #Not Connected
  181. # now the first I2C bus. The pin speeds are automatically setup
  182. # correctly, but can be overridden here if needed.
  183. PB8 I2C1_SCL I2C1
  184. PB9 I2C1_SDA I2C1
  185. # now the 2nd I2C bus
  186. # PB10 I2C2_SCL I2C2
  187. # PB11 I2C2_SDA I2C2
  188. # the 2nd SPI bus
  189. PB13 SPI2_SCK SPI2
  190. PB14 SPI2_MISO SPI2
  191. PB15 SPI2_MOSI SPI2
  192. # this input pin is used to detect that power is valid on USB
  193. PC0 VBUS_VALID INPUT
  194. # this defines the CS pin for the magnetometer and first IMU. Note
  195. # that CS pins are software controlled, and are not tied to a particular
  196. # SPI bus
  197. PC1 MAG_CS CS #Not Connected
  198. PC2 MPU_CS CS #MPU9250
  199. # this defines more ADC inputs
  200. PC3 AUX_POWER ADC1 SCALE(1)
  201. PC4 AUX_ADC2 ADC1 SCALE(1)
  202. # and the analog input for airspeed (rarely used these days)
  203. PC5 PRESSURE_SENS ADC1 SCALE(2)
  204. # this sets up the UART for talking to the IOMCU. Note that it is
  205. # vital that this UART has DMA available. See the DMA settings below
  206. # for more information
  207. # USART6 to IO
  208. PC6 USART6_TX USART6
  209. PC7 USART6_RX USART6
  210. # now setup the pins for the microSD card, if available
  211. PC8 SDMMC_D0 SDMMC1
  212. PC9 SDMMC_D1 SDMMC1
  213. PC10 SDMMC_D2 SDMMC1
  214. PC11 SDMMC_D3 SDMMC1
  215. PC12 SDMMC_CK SDMMC1
  216. PD2 SDMMC_CMD SDMMC1
  217. # more CS pins for more sensors. The labels for all CS pins need to
  218. # match the SPI device table later in this file
  219. # PC13 GYRO_EXT_CS CS #Not Connected
  220. # PC14 BARO_EXT_CS CS
  221. PC15 ACCEL_CS CS #MPU20602
  222. PD7 BARO_CS CS #MS5611
  223. # PC15 MPU_EXT_CS CS #MPU20602
  224. # the first CAN bus
  225. PD0 CAN1_RX CAN1
  226. PD1 CAN1_TX CAN1
  227. # Another USART, this one for telem1. This one has RTS and CTS lines
  228. # USART2 serial2 telem1
  229. PD3 USART2_CTS USART2
  230. PD4 USART2_RTS USART2
  231. PD5 USART2_TX USART2
  232. PD6 USART2_RX USART2
  233. # the telem2 USART, also with RTS/CTS available
  234. # USART3 serial3 telem2
  235. PD8 USART3_TX USART3
  236. PD9 USART3_RX USART3
  237. PD11 USART3_CTS USART3
  238. PD12 USART3_RTS USART3
  239. # the CS pin for FRAM (ramtron). This one is marked as using
  240. # SPEED_VERYLOW, which matches the HAL_PX4 setup
  241. PD10 FRAM_CS CS SPEED_VERYLOW
  242. # now we start defining some PWM pins. We also map these pins to GPIO
  243. # values, so users can set BRD_PWM_COUNT to choose how many of the PWM
  244. # outputs on the primary MCU are setup as PWM and how many as
  245. # GPIOs. To match HAL_PX4 we number the GPIOs for the PWM outputs
  246. # starting at 50
  247. PE14 TIM1_CH4 TIM1 PWM(1) GPIO(50)
  248. PE13 TIM1_CH3 TIM1 PWM(2) GPIO(51)
  249. PE11 TIM1_CH2 TIM1 PWM(3) GPIO(52)
  250. PE9 TIM1_CH1 TIM1 PWM(4) GPIO(53)
  251. PD13 TIM4_CH2 TIM4 PWM(5) GPIO(54)
  252. PD14 TIM4_CH3 TIM4 PWM(6) GPIO(55)
  253. # this is the invensense data-ready pin. We don't use it in the
  254. # default driver
  255. PD15 MPU_DRDY INPUT
  256. # now the 2nd GPS UART
  257. # UART8 serial4 GPS2
  258. PE0 UART8_RX UART8
  259. PE1 UART8_TX UART8
  260. # now setup SPI bus4
  261. # PE2 SPI4_SCK SPI4 #Not Connected
  262. # PE5 SPI4_MISO SPI4 #Not Connected
  263. # PE6 SPI4_MOSI SPI4 #Not Connected
  264. # this is the pin to enable the sensors rail. It can be used to power
  265. # cycle sensors to recover them in case there are problems with power on
  266. # timing affecting sensor stability. We pull it high by default
  267. PE3 VDD_3V3_SENSORS_EN OUTPUT HIGH
  268. # UART7 maps to uartF in the HAL (serial5 in SERIALn_ parameters)
  269. PE7 UART7_RX UART7
  270. PE8 UART7_TX UART7
  271. # define a LED, mapping it to GPIO(0)
  272. PE12 FMU_LED_AMBER OUTPUT GPIO(0)
  273. # power flag pins. These tell the MCU the status of the various power
  274. # supplies that are available. The pin names need to exactly match the
  275. # names used in AnalogIn.cpp.
  276. PB5 VDD_BRICK_VALID INPUT PULLUP
  277. # PB7 VDD_SERVO_VALID INPUT PULLUP #Not Connected
  278. # PE10 VDD_5V_HIPOWER_OC INPUT PULLUP #Not Connected
  279. PE15 VDD_5V_PERIPH_OC INPUT PULLUP
  280. # now the SPI device table. This table creates all accessible SPI
  281. # devices, giving the name of the device (which is used by device
  282. # drivers to open the device), plus which SPI bus it it on, what
  283. # device ID will be used (which controls the IDs used in parameters
  284. # such as COMPASS_DEV_ID, so we can detect when the list of devices
  285. # changes between reboots for calibration purposes), the SPI mode to
  286. # use, and the low and high speed settings for the device
  287. # You can define more SPI devices than you actually have, to allow for
  288. # flexibility in board setup, and the driver code can probe to see
  289. # which are responding
  290. # The DEVID values and device names are chosen to match the PX4 port
  291. # of ArduPilot so users don't need to re-do their accel and compass
  292. # calibrations when moving to ChibiOS
  293. SPIDEV ms5611 SPI1 DEVID3 BARO_CS MODE0 20*MHZ 20*MHZ
  294. # SPIDEV ms5611_ext SPI4 DEVID2 BARO_EXT_CS MODE3 20*MHZ 20*MHZ
  295. # SPIDEV mpu6000 SPI1 DEVID4 MPU_CS MODE0 2*MHZ 8*MHZ
  296. SPIDEV icm20608-am SPI1 DEVID2 ACCEL_CS MODE0 4*MHZ 8*MHZ
  297. SPIDEV mpu9250 SPI1 DEVID4 MPU_CS MODE0 4*MHZ 8*MHZ
  298. # SPIDEV mpu9250_ext SPI4 DEVID1 MPU_EXT_CS MODE3 4*MHZ 8*MHZ
  299. # SPIDEV hmc5843 SPI1 DEVID5 MAG_CS MODE3 11*MHZ 11*MHZ
  300. # SPIDEV lsm9ds0_g SPI1 DEVID1 GYRO_EXT_CS MODE0 11*MHZ 11*MHZ
  301. # SPIDEV lsm9ds0_am SPI1 DEVID2 ACCEL_EXT_CS MODE0 11*MHZ 11*MHZ
  302. # SPIDEV lsm9ds0_ext_g SPI4 DEVID4 GYRO_EXT_CS MODE3 11*MHZ 11*MHZ
  303. # SPIDEV lsm9ds0_ext_am SPI4 DEVID3 ACCEL_EXT_CS MODE3 11*MHZ 11*MHZ
  304. SPIDEV ramtron SPI2 DEVID10 FRAM_CS MODE3 8*MHZ 8*MHZ
  305. # SPIDEV external0m0 SPI4 DEVID5 MPU_EXT_CS MODE0 2*MHZ 2*MHZ
  306. # SPIDEV external0m1 SPI4 DEVID5 MPU_EXT_CS MODE1 2*MHZ 2*MHZ
  307. # SPIDEV external0m2 SPI4 DEVID5 MPU_EXT_CS MODE2 2*MHZ 2*MHZ
  308. # SPIDEV external0m3 SPI4 DEVID5 MPU_EXT_CS MODE3 2*MHZ 2*MHZ
  309. # SPIDEV pixartPC15 SPI4 DEVID13 ACCEL_EXT_CS MODE3 2*MHZ 2*MHZ
  310. # Now some commented out SPI device names which can be used by
  311. # developers to test that the clock calculations are right for a
  312. # bus. This is used in conjunction with the mavproxy devop module
  313. # for SPI clock testing
  314. #SPIDEV clock500 SPI4 DEVID5 MPU_EXT_CS MODE0 500*KHZ 500*KHZ # gives 329KHz
  315. #SPIDEV clock1 SPI4 DEVID5 MPU_EXT_CS MODE0 1*MHZ 1*MHZ # gives 657kHz
  316. #SPIDEV clock2 SPI4 DEVID5 MPU_EXT_CS MODE0 2*MHZ 2*MHZ # gives 1.3MHz
  317. #SPIDEV clock4 SPI4 DEVID5 MPU_EXT_CS MODE0 4*MHZ 4*MHZ # gives 2.6MHz
  318. #SPIDEV clock8 SPI4 DEVID5 MPU_EXT_CS MODE0 8*MHZ 8*MHZ # gives 5.5MHz
  319. #SPIDEV clock16 SPI4 DEVID5 MPU_EXT_CS MODE0 16*MHZ 16*MHZ # gives 10.6MHz
  320. # this adds a C define which sets up the ArduPilot architecture
  321. # define. Any line starting with 'define' is copied literally as
  322. # a #define in the hwdef.h header
  323. define HAL_CHIBIOS_ARCH_FMUV3 1
  324. # now some defines for logging and terrain data files
  325. define HAL_BOARD_LOG_DIRECTORY "/APM/LOGS"
  326. define HAL_BOARD_TERRAIN_DIRECTORY "/APM/TERRAIN"
  327. # we need to tell HAL_ChibiOS/Storage.cpp how much storage is
  328. # available (in bytes)
  329. define HAL_STORAGE_SIZE 16384
  330. # allow to have have a dedicated safety switch pin
  331. define HAL_HAVE_SAFETY_SWITCH 1
  332. # this enables the use of a ramtron device for storage, if one is
  333. # found on SPI. You must have a ramtron entry in the SPI device table
  334. # enable RAMTROM parameter storage
  335. define HAL_WITH_RAMTRON 1
  336. # setup for the possibility of an IMU heater as the The CUBE has
  337. # an IMU header
  338. define HAL_HAVE_IMU_HEATER 1
  339. # enable FAT filesystem support (needs a microSD defined via SDIO)
  340. define HAL_OS_FATFS_IO 1
  341. # enable RTSCTS support. You should define this if you have any UARTs
  342. with RTS/CTS pins
  343. define AP_FEATURE_RTSCTS 1
  344. # enable SBUS_OUT on IOMCU (if you have an IOMCU)
  345. define AP_FEATURE_SBUS_OUT 1
  346. # now setup the default battery pins driver analog pins and default
  347. # scaling for the power brick
  348. define HAL_BATT_VOLT_PIN 2
  349. define HAL_BATT_CURR_PIN 3
  350. define HAL_BATT_VOLT_SCALE 10.1
  351. define HAL_BATT_CURR_SCALE 17.0
  352. # this defines the default maximum clock on I2C devices.
  353. define HAL_I2C_MAX_CLOCK 100000
  354. # uncomment the lines below to enable strict API
  355. # checking in ChibiOS
  356. # define CH_DBG_ENABLE_ASSERTS TRUE
  357. # define CH_DBG_ENABLE_CHECKS TRUE
  358. # define CH_DBG_SYSTEM_STATE_CHECK TRUE
  359. # define CH_DBG_ENABLE_STACK_CHECK TRUE
  360. # we can't share IO UART (USART6)
  361. DMA_NOSHARE USART6_TX USART6_RX ADC1
  362. DMA_PRIORITY USART6*
  363. # start on 4th sector (1st sector for bootloader, 2 for extra storage)
  364. FLASH_RESERVE_START_KB 96
  365. # fallback storage in case FRAM is not populated
  366. define STORAGE_FLASH_PAGE 1
  367. # list of files to put in ROMFS. For fmuv3 we need an IO firmware so
  368. # we can automatically update the IOMCU firmware on boot. The format
  369. # is "ROMFS ROMFS-filename source-filename". Paths are relative to the
  370. # ardupilot root
  371. ROMFS io_firmware.bin Tools/IO_Firmware/iofirmware_lowpolh.bin