Commit Graph

50 Commits

Author SHA1 Message Date
Michael Keller 9b04b5ebd7
H7 build script updates (#8492)
H7 build script updates
2019-06-28 19:23:20 +12:00
Dominic Clifton 0c7b161c32 STM32H750 - Allow targets to override TARGET_FLASH. 2019-06-27 02:57:55 +02:00
Dominic Clifton aea8733e4f STM32H7 - Allow targets to override linker script. 2019-06-27 02:57:55 +02:00
Dominic Clifton 05c518847d [H7] Relocate startup files to match betaflight/master branch 2019-06-26 12:36:57 +02:00
jflyper dad1110181 [H7] Relocate LD files to match betaflight/master branch 2019-06-26 12:36:34 +02:00
Dominic Clifton e81d11049f Fix F1/F3 OPBL targets using wrong linker script. 2019-06-09 19:04:39 +02:00
Dominic Clifton 0632eeb934 Support compilation of EXST (EXTERNAL STORAGE) targets
- Initial

- Adjust load address of EXST firmware.

- Add helper script to pad an EXST binary to the expected size.

Padded firmware currently required due to a bug in the flash/dfu code
which causes anything less than a flash page size to be truncated when
uploading new firmware via the bootloader DFU.

- Minor linker script cleanups.

- STM32H7.mk change hardcoded TARGET_FLASH (384) to FIRMWARE_SIZE

- Delete unused configuration section entries from linker
scripts.

- Increase EXST firmware size to 448K.
It turns out 384K wasn't enough for a feature-complete firmware.

- Update pad-exst.sh to use 448K by default.

- Move the EXST file generation to the makefile.

[EXST] Embed firmware hash in ELF

- Add debug marker at end of CODE_RAM section.

It was found when transferring firmware to the H7 RAM via a BMP probe
using the 'gdb load' command, that the last few bytes were not
transferred, this debug marker is present to ensure all needed parts of
the firmware are present.

Example memory view of corrupted bytes at end of transfer:
0x2407DFAE  DEB90000 DEB9DEB9 DEB9DEB9 DEB9DEB9  ..¹Þ¹Þ¹Þ¹Þ¹Þ¹Þ¹Þ
0x2407DFBE  000000B9 00000000 00000000 00000000  ¹...............

should be:
0x2407DFAE  DEB9DEB9 DEB9DEB9 DEB9DEB9 DEB9DEB9  ¹Þ¹Þ¹Þ¹Þ¹Þ¹Þ¹Þ¹Þ
0x2407DFBE  00000000 00000000 00000000 00000000  ................

- Remove debug marker in EXST firmware.

STM32H750_EXST - Provide space for empty hash.

* Bootloader will run firmware if hash is empty, without re-verifying
RAM content against hash.
* CODE_RAM always shows as 100% usage.

STM32H750_EXST - Use a specific ELF section for a hash.

Two benefits:
1) CODE_RAM no-longer shows 100% full, since it is no-longer
padded/filled.
2) Prepares the code so that objcopy can be used to inject the hash
into the ELF.

STM32H750_EXST - Patch MD5 into ELF.

Process is now as follows.

* Binary generated (via make target dependency) so there is something to
hash.
* Binary copied (and padded).
* MD5 Hash computed.
* xxd patch file generated from hash.
* xxd hash patch applied to copy of binary at correct address.
* elf .exst_hash section dumped.
* hash injected into into dumped section.
* elf .exst_hash section updated with updated dumped section.

Replace EXST with USE_EXST.

Add documentation for the EXST firmware format.

Add table formatting to EXST documentation.

Update bootloader block.

Update H750 EXST linker script to use block format 0x00.

Use .exst.elf and .exst.bin on the exst files.

Add 'no checksum' to list of checksum hash methods.

Update EXST build system so it generates the following sets of files

obj/main/betaflight_TARGET.elf
obj/main/betaflight_TARGET.map
obj/main/betaflight_TARGET_EXST.elf
obj/betaflight_VERSION_TARGET.bin
obj/betaflight_VERSION_TARGET.bin.md5
obj/betaflight_VERSION_TARGET_EXST.bin

Update EXST build system to be more user-friendly.

* user-flashable files are generated in the normal place.
* Intermediate files are generated in `obj/main/...`
* Removes the `exst` goal.
* Adds .hex generation for EXST builds based on the patched .elf.

To build EXST targets, simply use `make TARGET=x` as normal and flash
the resulting `.hex/.bin` files rather than the .exst.bin file.

Developers can use either the `.elf` or patched `_EXST.elf` file as is
appropriate for their needs.

EXST documentation updated to match changes to build system.
2019-06-07 09:14:49 +12:00
jflyper 6beeca38c3 Consolidate F7 and H7 VCP HAL code except usbd_conf.c 2019-06-01 11:57:50 +09:00
jflyper dacb709e38 [H7] System and build files
Basic system files

- Initial system files

- Additional RCC clock enables for testing

- Coding style tidy (target/system_stm32h7xx.c) and enable MCO for testing

- Clock generator changes for SPI support

- Setup MPU for "D2 SRAM as write-through by MPU, call it DMA_RAM"

- Drop USB clock enabling from driver/system_stm32h7xx.c

- stm32h7_hal_conf.h for persistent object storage

Basic build files

STM32H7.mk changes

- STM32H7.mk for USE_UART and USE_SERIAL_RX

- Modify STM32H7.mk for inclusion of SPI driver

- STM32H7.mk change for D2 SRAM as write-through by MPU, call it DMA_RAM

- STM32H7.mk for DMA facility

- STM32H7.mk for [TIMER] For "Initial cut without Dshot"

- STM32H7.mk change for [LED_STRIP] Add LED_STRIP

- STM32H7.mk for [ADC] Initial cut without internal sensors

- STM32H7.mk for Enable I2C (HAL)

- STM32H7.mk for "Enable HAL-based DShot (no burst yet)"

- STM32H7.mk change for transponder

- STM32H750 - Add platform support.

- STM32H750 - Add H750 MCU ID.

- STM32H743 - Add MCU ID.

STM32H7.mk change for "Burst Dshot First working version"

Fix boot loader request

STM32H750 - Add PERSISTENT memory support.

STM32H743 - Add PERSISTENT memory support.

Use PERSISTENT memory for bootloader request.

Using DTCM RAM did not work on H750.

Change flash latency from 4WS to 2WS

STM32H750 - Fix reset of RCC_CR to reset value.

Note: The comment above the code didn't match code.

STM32H750 - Remove duplicate startup code, see SystemClock_Config.

STM32H7.mk changes for Port RTC backup register based persistent storage for H7

Make use of persistent object facility

Force reboot after possible boot loader activity

Enable CRS

stm32h7xx_hal_conf.h for H7 - QuadSPI support

stm32h7xx_hal_conf.h for STM32H7 - SDCard/SDIO using HAL Driver

stm32h7xx_hal_conf.h : Fix systick to be 0x00 instead of ST's default 0x0F.
This fixes the ability to use HAL_Delay() from an ISR, as required by
the ST's USB Library.
Specifically, systick handler must be a higher priority than the USB
FS/HS Interrupt handler priorities.

stm32h7xx_hal_conf.h for Add PID-Audio support

source.mk for H7 - QuadSPI support

drivers/system_stm32h7xx.c for H7 - QuadSPI support

STM32H7.mk for H7 - QuadSPI support

STM32H7.mk change for CDC-HID support

common_pre.h updates

- Scheduler parameters to same as F4 & F7

- Enable some important default features

- STM32H7 - Enable ITCM RAM.
Requires voltage scaling fix from commit
6e684c609310024141c43de484a5e78103140e3c

STM32H750 - Disable caches before reboot.

Prior to this when EEPROM_IN_RAM was used the persistent data section
would have corruption immediately after a reboot, prior to even the
Reset_Handler code having been executed.

drivers/system_stm32h7xx.c Touch-up after 2019-02-02 rebase

STM32H7 - Write protect ITCM ram.

Remove local defs for RESET_xxx symbols

STM32H750 - EXST firmware reboots to FLASH bootloader, rather than ROM bootloader.

STM32H750 - Disable some MCO/clock testing code as the pins interfere with new targets.

STM32H750 - Don't disable data caches after bootloader.

Observed that disabling dcache after cold boot with BOOT pin high causes
segfault.

drivers/system_stm32h7xx.c for STM32H7 - SDCard/SDIO using HAL Driver

drivers/system_stm32h7xx.c change for Move SDMMC clock init into SDIO driver

drivers/system_stm32h7xx.c: Cleanup some Clock/MCO/GPIO initialisation code.

drivers/system_stm32h7xx.c for Reset if systick is stuck.

STM32H7 - Fix missing CPU voltage scaling.

It appears this was the cause of other seemingly random issues:

* Crash soon after enabling USB.
* Flash write failures.
* Random un-explainable crashes.

Change RCC_HSE_BYPASS to RCC_HSE_ON

Even Nucleo-H743 seems to work without setting HSE_BYPASS.

STM32H7xx - Move memory section initialisation earlier into the init sequence.

Allows startup-code/libs/etc to be moved into different memory regions.

Don't touch vector table in EXST targets

STM32H750_EXST - fix boot loop

target/system_stm32h7xx.c for STM32H7 - SDCard/SDIO using HAL Driver

target/system_stm32h7xx.c change for Fix SD card clock speed selection

STM32H750_EXST - Reset MPU regions on boot.

* Failure to reset regions will result in mem-fault if bootloader has
configured a similar region.

STM32H750 - Fix missing include of platform.h in system_stm32h7xx.c

This caused the SDMMC peripheral clock to be un-configured (at reset
state) when USE_SDCARD_SDIO was defined.

Change MPU region number for DMA_RAM from 0 to 1

Avoid conflict with ITCM-RAM write protection.

STM32H7xx - HSERDY slow/stuck workarounds.

STM32H7xx - Fix region MPU number for SDIO.

* It was overwriting the previous region causing LED strip and
transponder issues.

Target/system_stmh7xx.c for Reset if systick is stuck.

startup/system_stm32h7xx.c change for non-caching DMA_RAM

H750 - Use SIZE optimization by default due to limited flash space.

STM32H7.mk for STM32H7 - SDCard/SDIO using HAL Driver

STM32H7.mk updates

- Decrease HSE_STARTUP_TIMEOUT to 1 second
* default is 5 seconds, which is too long when HSE gets stuck.

- Add PID-Audio support

Temporary override LINKER_DIR
2019-05-21 02:26:31 +09:00
jflyper e62cc6552d [F7] Move non-library CDC-HID code out of lib tree 2019-05-08 11:59:23 +09:00
Thorsten Laux cec679ac60 incorporte review feedback 2019-03-03 11:33:14 +01:00
blckmn 1bedb1b911 Moved hal config headers etc to ./src/main/startup 2019-02-20 18:24:16 +11:00
jflyper c0d51a5f55 Convert F7s to use RTC backup register based persistent memory 2018-12-03 23:56:41 +09:00
jflyper 99fde1a0ff Use RTC backup register for persistent storage 2018-12-03 09:45:36 +09:00
jflyper 00840ce40f Prepare SD card SPI and SDIO variants for consolidation 2018-10-01 19:44:04 +09:00
Andrey Mironov 7a331d03f4 Added preliminary support for STM32F765xx 2018-09-07 22:47:20 +03:00
Andrey Mironov bf984f39b1 F7 optimizations (#5674)
* Revert "Revert "Rewritten F7 dshot to LL (draft)" (#5430)"

This reverts commit aa42a69d2f.

* Reworked F7 linker scripts to maximize performance of both F74x and F72x

* Some comments and changes from original F7 HAL DSHOT

* Prohibit inlining of some functions to place them in ITCM-RAM

* Fixed usartTargetConfigure implicit declaration

* Moved back to SRAM1 as main RAM

* Added SRAM2 attribute

* Fixed LL DSHOT FOR SPRF7DUAL and probably other adv TIM users

* Fixed SPRF7DUAL rev. A motor order

* Enabled CCM for data on F40x

* Fixed F7 startup assembly symbols

* Fixed KISSFCV2F7 linker script

* Added a quick way of building F7 targets only

* Got rid of the useless F7 target script

* Added NOINLINE and got rid of useless __APPLE__ define

* Added some important functions to ITCM

* Added NOINLINE macro for tests

* Copy to ITCM before passing execution into it

* Minimized cache footprint of motor output code

* Evicted low-impact functions from ITCM

* Switched MATEKF722 and SPRACINGF7DUAL to burst DSHOT

* Switched CLRACINGF7 to burst DSHOT

* Moved UART RX&TX buffers to DTCM-RAM to avoid cache incoherency

* Marked taskMainPidLoop for ITCM-RAM, disallowed inlining per-function

* Revert "Added a quick way of building F7 targets only"

This reverts commit 22945189980deaf493be54a5056a080e7edad629.
2018-04-20 08:37:32 +12:00
jflyper d749879cf6 FAT emulation of onboard flash for MSC (#5650) 2018-04-11 11:29:56 +12:00
jflyper 2811171ea3 Prepare MSC for simultaneous multiple storages 2018-04-09 11:18:59 +09:00
Chris 9d5fa7311e Add MSC for F7 (#5629)
* Add MSC for F7

* Fix compilation error.
2018-04-06 12:53:26 +12:00
Michael Keller 75bafb7b71
Merge pull request #3039 from cleanflight/f7-transponder-ir (#5618)
CF/BF - Add support for IR Transponder on STM32F7 boards.
2018-04-06 03:44:18 +12:00
conkerkh 494e42610e Add SDIO for F7 (#5604) 2018-04-04 01:03:54 +12:00
conkerkh f00e4f2a82 Simplify compilation of F4 SDIO enabled targets. (#5603) 2018-04-02 14:41:16 +12:00
conkerkh a9136e2ba0 Add CDC+HID on F7 (#5596) 2018-04-02 14:35:51 +12:00
Michael Keller 92d19e7be6
Merge pull request #3036 from cleanflight/spracingf7dual-pidaudio (#5586)
PID-Audio feature
2018-04-01 11:08:41 +12:00
Michael Keller a8e86880f5
Generalised USB MSC use for all F4 targets with SD card. (#5519) 2018-03-24 16:00:53 +13:00
conkerkh 4786e1a333 Add Composite CDC+HID device option. (#5478)
* Add Composite CDC+HID device option.

- It passes on though HID interface 8 channels received from TX
- Endpoints are reconfigured to support HID interface
- Potentially this can slow down SPI Flash transfer though CDC interface...
- This could be addressed by support for MSC when using SPI Flash (emulating FATFS)

* Different way to handle MIN redefine
2018-03-22 15:21:22 +13:00
conkerkh 3a917a3755 Add USB Mass Storage Class support (#5443)
* Add MSC support

* Add support for MSC to WORMFC and SDIO_DMA

* Cleanup in fc_init

* Fix headers
2018-03-22 00:11:34 +13:00
Dominic Clifton 0a2e5a5878 CF/BF - Update DSP_Lib and STM32F7/Drivers/CMSIS to CMSIS 5.3.0. (#5431)
* CF/BF - Update DSP_Lib and STM32F7/Drivers/CMSIS to CMSIS 5.3.0.

CMSIS 5.3.0 - https://github.com/ARM-software/CMSIS_5/releases/tag/5.3.0

* cleanup lib.

* pfft

* relocate driver files from lib/main/CMSIS/CM* to lib/main/STM32xx
folders

* Move DSP folder inside CM5.

It came from the same source as the other files inside CM5

* Remove the CM5 folder and move the files in it one level up.
2018-03-12 09:34:43 +13:00
Dominic Clifton cde9a9517b SPRacingF7DUAL - Dual SIMULTANEOUS gyro support. (#5264)
* CF/BF - Set STM32F7 SPI FAST clock to 13.5Mhz - Gyros not stable at
27mhz.

* CF/BF - Initial SPRacingF7DUAL commit.

Support two simultaneous gyro support (code by Dominic Clifton and Martin Budden)
There are new debug modes so you can see the difference between each gyro.

Notes:
* spi bus instance caching broke spi mpu detection because the detection
tries I2C first which overwrites the selected bus instance when using
dual gyro.
* ALL other dual-gyro boards have one sensor per bus.  SPRacingF7DUAL is has two per bus and thus commit has a lot of changes to fix SPI/BUS/GYRO initialisation issues.

* CF/BF - Add SPRacingF4EVODG target.

This target adds a second gyro to the board using the SPI pads on the back of the board.

* CF/BF - Temporarily disable Gyro EXTI pin to allow NEO target to build.
2018-03-04 11:29:31 +13:00
mikeller b928950598 Moved rx drivers into `drivers/rx/`. 2017-12-24 13:55:18 +13:00
Martin Budden 671382234a Enabled switch fallthrough checking by compiler 2017-12-23 19:46:40 +00:00
Steffen Windoffer 32fef3019a update to gcc 7 2017-12-23 13:05:11 +01:00
mikeller b489d0ba9d Renamed 'parameter_group' to 'pg'. 2017-12-19 23:36:31 +13:00
felix cfc0dcf036 KISSFCV2F7 BF target 2017-12-16 10:19:28 +01:00
Martin Budden d6d70d5a74 Fixed F1 build 2017-12-01 06:50:34 +00:00
jflyper 608d56160d Refactor SPI 2017-11-23 11:10:14 +09:00
jflyper 8296990774 Revert #4565 2017-11-13 16:51:09 +09:00
jflyper e5e5846a74 Refactor SPI 2017-11-13 10:45:01 +09:00
jflyper 97e9e9eed4 Why did I find this ... 2017-11-08 19:42:44 +09:00
Anders Hoglund 24a282a9a3 Added .mk as files with LF line ending. Converted a few files in the make dir. 2017-11-05 20:41:17 +01:00
Sami Korhonen fa6112e1b8 F7 Dshot hack 2017-10-15 10:08:41 +03:00
cs8425 f8c9b57fd6 fix cli crash on get, dump, diff on SITL 2017-09-08 00:12:12 +08:00
Steffen Windoffer 03aa31acdd remove not needed whitespaces 2017-08-24 11:33:39 +02:00
blckmn 834289e456 Move all F7 to use LL 2017-07-30 12:10:46 +10:00
blckmn e6780bd4d8 Fix unused param, add PERIPH_DRIVER flag for F4, tidied up F1 and F3 in prep. 2017-07-30 01:07:09 +10:00
blckmn 2dca6a5bbc Preparation for F4 being LL enabled.
Updated F7 to use latest HAL / LL libraries
2017-07-29 23:02:39 +10:00
blckmn e8c4ef83d9 IO Clean up and use of Low level for F7
- Move F7 to optional LL driver for IO and
- cleaned up and removed the remaining old gpio functions from other targets
2017-07-28 04:03:56 +10:00
blckmn 6151ded961 Low level driver for SPI for F7 2017-07-23 20:53:45 +10:00
blckmn 61cfb0aedf Some separation in the Makefile 2017-07-21 07:51:13 +10:00