From 37c1598f3893c96a808c77439da9e141fda857fb Mon Sep 17 00:00:00 2001 From: Daniel Agar Date: Mon, 6 Sep 2021 16:38:25 -0400 Subject: [PATCH] boards: cubepilot_cubeorange enable calib_udelay and run on test rack --- .ci/Jenkinsfile-hardware | 1 + .../cubepilot_cubeorange_bootloader.bin | Bin 42656 -> 42624 bytes .../nuttx-config/bootloader/defconfig | 2 +- .../cubeorange/nuttx-config/include/board.h | 30 ++++++------------ .../cubeorange/nuttx-config/nsh/defconfig | 2 +- .../cubeorange/nuttx-config/test/defconfig | 5 ++- .../stm32h7/driver/src/uc_stm32h7_can.cpp | 4 +++ 7 files changed, 19 insertions(+), 25 deletions(-) diff --git a/.ci/Jenkinsfile-hardware b/.ci/Jenkinsfile-hardware index dfd7924da6..f10e79c43d 100644 --- a/.ci/Jenkinsfile-hardware +++ b/.ci/Jenkinsfile-hardware @@ -64,6 +64,7 @@ pipeline { checkStatus() quickCalibrate() sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "px4io status"' + sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "calib_udelay"' } } stage("print topics") { diff --git a/boards/cubepilot/cubeorange/extras/cubepilot_cubeorange_bootloader.bin b/boards/cubepilot/cubeorange/extras/cubepilot_cubeorange_bootloader.bin index e563493387a3f13343c9434c4360d408f168fb54..a6829bca7394183c31024ffe9c2f704ae4bd55a7 100755 GIT binary patch delta 1850 zcmX|>4Nz276vxkb``&VwWer>zV9jZF0e4}^1SFRd*EN`mD~7Be@pFCudsbBrlU%CaWPoXv~@6&EbU&eN?o^Sl3Z?mhROvwJ`G z_ephqQrBq-FYp1W5;Z(WW5YbYQj=W1ZUROwUxN|*^?Bp+)GvaI#$`QO`Y(cVEF=vA zBmvRU3G64*S;H{+D)FHI#V%8ob+pdv8Li7O1^hnTg)NW@R~qZE6&$WBFV*Gy3V2ZC zj&=I8efIlXmN|W<hhQZrm9`? z^?|!-q?I(yZ?&2N4&E-u#ce6qvU zMUw5B>=}j0kpZ7-XZScO#=^DlVhi54DhTtXQU;qKp7c(_PGpz^uw073X<8ZbWrb~H zy%1F(mBte?0cKbfO>ql|#k@jsqgfnKauMI*=d}5V+@i?!&w-4B8876Y(p z{DQ%TFYuU2iCD(7CgoDQo@~2lo^%ZHkSLFyC!tHUPp(8=)<@90mliD(F;lk7*e=@Q zmmn_SR}(f+TVpE11)|6FsDfvBf_W;nS>{uQj{U$+5SNK`Zm`5*7f-f0aJ4A5P=?h! zHt~MdNxX`kQ92vnPRPrB>r~zAv>KPw|HwCCZL=V0*-2 zN2i3#c*%@pED{@Mtd%jA4`pn@)1o#rTT1WA0@idduy0AvhqYlgu#;i>Nr#C%8do_h ze#jcqqLZJPvlK_UE$0F36YFy}B2MAMb1kS5F}e33KFi%Mqd|THSiJ#~{-8?Syuwv0 z(e8ia3ZY>y-6|EjVQjA$@MxsS>iNJbh#Pt0xA|J6LvR*YFtSSqiM5_bvY(-J)~FFOsgb16UnV#hWT;V<|sg zSsB|){-cz>i?o}7f~WJ(3U}2B)Q*!o)FCFV+N{BuqN!#rDl@74G@;a%D3~G2)@_Ky zGopXS^NZn~M}br7q_uo70n@`Lv5lh^Dk?1q&90#%e!>UeyOH zS~LZ$J2dtLzpEv|R`!3tbSthn?8|m%x8jZR8qcV?f8Y6`F)h-~6{JFwkEKk+khi8vo-+TC(?K>7&$AEO46A6Pb18D646uRM9L)R|eTg#7 delta 1902 zcmX|>4Nz276vxkb``+%|#U+pkSYuok)mqmDS)Y^CNB>w;p?dAjvxe(!(Ix#!+<@4NTD zh5@N#KstO@!f`$*)nFud=#p?bU#FY#RMQ0bmhU!xXU)~bc=Yo(izX{pZT4moOPMqz}z4ekuuNf-F^x(L_YB8%JUSDhA@ z#l1(qGnlp5)k(}TnBpQGkd=2H2%S3T?s?!fsO)iT2)l7+B zmLrPSevIun{|PTFlq$z&zXj2x4-(0QO;w>p(ix^ph%KxSrW8n((S%I+sXbkWO0YtC z7}-mRO72kdFjVYRauE;lKK&xu`FCm=HyNCX8+YP)ll`I>_hJ_En_l|7dsn65MYNv_ z#sc2%E#f)DTnu^RHrVc4th0h|Hy12h*<}Q_j$db+b#rf>MqoY)xIjdqskT$!jO}hz?`2q#xj0x%EXZjM*_-vwsp9`kgi(+teP`^`z%$cN4GSkEIvbLIL_U|cmu^G%@) z3q*bBH;Dbh5w<`=muQ??gT{GZLf?BdcD)#mcumIRVte#*#PxhIW-GmmEhV^K?6W+n z;26I(eHy(Ztv{N-?EvN_rgj1=g0le0y&Wk4&w_WWF=C2M2g|T7`0mhWlK+p5~FTnrF?Lfn{RFtSvG| z@qx@nJSR%Ba-@ul*}%Hz0vjP!=H1hSq<;h%CcV#2J3;Llw28e4?eOQ1Ki*! z##3UcqaN`Ae(KRURK)P3vk|xRI5onY@By$UGbAw5DxRm-NwnFYr~x#8MK@7{ZYBFl z^f+~rY1cwvjYMp|II&QVsEYo_o|TR2hqNceBf?SmjbaSj53GRPlfqcKoMEM?sywg9 z&xB)jjch!)lIpAmHq5)%{)|=PmFi29aU1pMAX@l_nt8a5dunPTFOmNul|M~7NI=1+ zMdKpQ{XOcVDQxzLziM~ruvBc=umzP;`jC%{-!@h#ST1s&-)h1!ab(909d?P%m#<>p za1$`YE5PcAtz`d)?$vvCC+Snozz!0+7TRMXp3w4+l724+no1;EOKfwJWYnr1x*rl& z^5R|NX3bkkQ);5$)+)YqcUMSg-(2Y9EdN&}z|NziWy=TX)D< z%WL1df%Rg=o@RYq{{&d)xC5i#O{5gP=gd0;31|(B9-BzYx8~1r1xCN%*tW?0_C$D5 zdVX?#7De9ROWR76XQ}jd-qn^d|V0@f24b@R!# zn4~BFk4ty+DuTY8Z0}L>r{qWcqSd~@bK7Ih1OI^4-dp0Ed}!SJ5wC6EhgXDQ?_#CQ z69Y`5)1j#@sCoq0MZST2O&R&kq^4lIk$f#bB}nOTu4-T(l5So_N0;cLBYc$TC0>6T z*d!@UACA(o)>M0PC|}d#ynBB|;!m}}ekQbt_M8ve;m^=g2rU-#3{UiYiofuSp7gNL hBm)$HYJbTHIfR|Z97r}%u*TP9bSAO>t7hZM#2C9 diff --git a/boards/cubepilot/cubeorange/nuttx-config/bootloader/defconfig b/boards/cubepilot/cubeorange/nuttx-config/bootloader/defconfig index 42c5602dd0..923ca26681 100644 --- a/boards/cubepilot/cubeorange/nuttx-config/bootloader/defconfig +++ b/boards/cubepilot/cubeorange/nuttx-config/bootloader/defconfig @@ -25,7 +25,7 @@ CONFIG_ARMV7M_USEBASEPRI=y CONFIG_BOARDCTL_RESET=y CONFIG_BOARD_INITTHREAD_PRIORITY=254 CONFIG_BOARD_LATE_INITIALIZE=y -CONFIG_BOARD_LOOPSPERMSEC=95150 +CONFIG_BOARD_LOOPSPERMSEC=79954 CONFIG_BOARD_RESET_ON_ASSERT=2 CONFIG_C99_BOOL8=y CONFIG_CDCACM=y diff --git a/boards/cubepilot/cubeorange/nuttx-config/include/board.h b/boards/cubepilot/cubeorange/nuttx-config/include/board.h index 1b877718e0..3a4abd0235 100644 --- a/boards/cubepilot/cubeorange/nuttx-config/include/board.h +++ b/boards/cubepilot/cubeorange/nuttx-config/include/board.h @@ -60,7 +60,6 @@ #define STM32_HSI_FREQUENCY 16000000ul #define STM32_LSI_FREQUENCY 32000 #define STM32_HSE_FREQUENCY STM32_BOARD_XTAL -#define STM32_LSE_FREQUENCY 0 /* Main PLL Configuration. * @@ -82,7 +81,6 @@ * PLLP2,3 = {2, 3, 4, ..., 128} * CPUCLK <= 480 MHz */ -#define STM32_PLLCFG_PLLSRC RCC_PLLCKSELR_PLLSRC_HSE /* PLL1, wide 4 - 8 MHz input, enable DIVP, DIVQ, DIVR * @@ -108,12 +106,12 @@ #define STM32_PLLCFG_PLL2CFG (RCC_PLLCFGR_PLL2VCOSEL_WIDE|RCC_PLLCFGR_PLL2RGE_4_8_MHZ|RCC_PLLCFGR_DIVP2EN|RCC_PLLCFGR_DIVQ2EN|RCC_PLLCFGR_DIVR2EN) #define STM32_PLLCFG_PLL2M RCC_PLLCKSELR_DIVM2(2) #define STM32_PLLCFG_PLL2N RCC_PLL2DIVR_N2(30) -#define STM32_PLLCFG_PLL2P RCC_PLL2DIVR_P2(2) +#define STM32_PLLCFG_PLL2P RCC_PLL2DIVR_P2(4) #define STM32_PLLCFG_PLL2Q RCC_PLL2DIVR_Q2(5) #define STM32_PLLCFG_PLL2R RCC_PLL2DIVR_R2(1) #define STM32_VCO2_FREQUENCY ((STM32_HSE_FREQUENCY / 2) * 30) -#define STM32_PLL2P_FREQUENCY (STM32_VCO2_FREQUENCY / 2) +#define STM32_PLL2P_FREQUENCY (STM32_VCO2_FREQUENCY / 4) #define STM32_PLL2Q_FREQUENCY (STM32_VCO2_FREQUENCY / 5) #define STM32_PLL2R_FREQUENCY (STM32_VCO2_FREQUENCY / 1) @@ -186,36 +184,28 @@ /* Kernel Clock Configuration * Note: look at Table 54 in ST Manual */ +#define STM32_RCC_D1CCIPR_SDMMCSEL RCC_D1CCIPR_SDMMC_PLL1 + #define STM32_RCC_D2CCIP2R_I2C123SRC RCC_D2CCIP2R_I2C123SEL_HSI /* I2C123 clock source */ #define STM32_RCC_D2CCIP1R_SPI123SRC RCC_D2CCIP1R_SPI123SEL_PLL2 /* SPI123 clock source */ #define STM32_RCC_D2CCIP1R_SPI45SRC RCC_D2CCIP1R_SPI45SEL_PLL2 /* SPI45 clock source */ -#define STM32_RCC_D3CCIPR_SPI6SRC RCC_D3CCIPR_SPI6SEL_PLL2 /* SPI6 clock source */ #define STM32_RCC_D2CCIP2R_USBSRC RCC_D2CCIP2R_USBSEL_PLL3 /* USB 1 and 2 clock source */ -#define STM32_RCC_D3CCIPR_ADCSEL RCC_D3CCIPR_ADCSEL_PLL2 /* ADC 1 2 3 clock source */ #define STM32_RCC_D2CCIP1R_FDCANSEL RCC_D2CCIP1R_FDCANSEL_HSE /* FDCAN 1 2 clock source */ -#define STM32_FDCANCLK STM32_HSE_FREQUENCY +#define STM32_RCC_D3CCIPR_ADCSEL RCC_D3CCIPR_ADCSEL_PLL2 /* ADC 1 2 3 clock source */ /* FLASH wait states */ #define BOARD_FLASH_WAITSTATES 2 /* SDMMC definitions ********************************************************/ /* Init 400kHz, freq = PLL1Q/(2*div) div = PLL1Q/(2*freq) */ -#define STM32_SDMMC_INIT_CLKDIV (300 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) +#define STM32_SDMMC_INIT_CLKDIV (125 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) -/* 25 MHz Max for now, 25 mHZ = PLL1Q/(2*div), div = PLL1Q/(2*freq) - * div = 4.8 = 240 / 50, So round up to 5 for default speed 24 MB/s +/* 25 MHz Max for now, 25 mHZ = PLL1Q/(2*div), div = PLL1Q/(2*freq) + * div = 100 / (2*25) */ -#if defined(CONFIG_STM32H7_SDMMC_XDMA) || defined(CONFIG_STM32H7_SDMMC_IDMA) -# define STM32_SDMMC_MMCXFR_CLKDIV (5 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) -#else -# define STM32_SDMMC_MMCXFR_CLKDIV (100 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) -#endif -#if defined(CONFIG_STM32H7_SDMMC_XDMA) || defined(CONFIG_STM32H7_SDMMC_IDMA) -# define STM32_SDMMC_SDXFR_CLKDIV (5 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) -#else -# define STM32_SDMMC_SDXFR_CLKDIV (100 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) -#endif +#define STM32_SDMMC_MMCXFR_CLKDIV (2 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) +#define STM32_SDMMC_SDXFR_CLKDIV (2 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) #define STM32_SDMMC_CLKCR_EDGE STM32_SDMMC_CLKCR_NEGEDGE diff --git a/boards/cubepilot/cubeorange/nuttx-config/nsh/defconfig b/boards/cubepilot/cubeorange/nuttx-config/nsh/defconfig index d585050335..ac2df7b3eb 100644 --- a/boards/cubepilot/cubeorange/nuttx-config/nsh/defconfig +++ b/boards/cubepilot/cubeorange/nuttx-config/nsh/defconfig @@ -42,7 +42,7 @@ CONFIG_ARMV7M_USEBASEPRI=y CONFIG_ARM_MPU_EARLY_RESET=y CONFIG_BOARDCTL_RESET=y CONFIG_BOARD_CRASHDUMP=y -CONFIG_BOARD_LOOPSPERMSEC=95150 +CONFIG_BOARD_LOOPSPERMSEC=79954 CONFIG_BOARD_RESET_ON_ASSERT=2 CONFIG_BUILTIN=y CONFIG_C99_BOOL8=y diff --git a/boards/cubepilot/cubeorange/nuttx-config/test/defconfig b/boards/cubepilot/cubeorange/nuttx-config/test/defconfig index 401e961cfa..7bea4b2425 100644 --- a/boards/cubepilot/cubeorange/nuttx-config/test/defconfig +++ b/boards/cubepilot/cubeorange/nuttx-config/test/defconfig @@ -41,7 +41,7 @@ CONFIG_ARMV7M_USEBASEPRI=y CONFIG_ARM_MPU_EARLY_RESET=y CONFIG_BOARDCTL_RESET=y CONFIG_BOARD_CRASHDUMP=y -CONFIG_BOARD_LOOPSPERMSEC=95150 +CONFIG_BOARD_LOOPSPERMSEC=79954 CONFIG_BOARD_RESET_ON_ASSERT=2 CONFIG_BUILTIN=y CONFIG_C99_BOOL8=y @@ -52,7 +52,6 @@ CONFIG_CDCACM_RXBUFSIZE=600 CONFIG_CDCACM_TXBUFSIZE=12000 CONFIG_CDCACM_VENDORID=0x2DAE CONFIG_CDCACM_VENDORSTR="CubePilot" -CONFIG_CLOCK_MONOTONIC=y CONFIG_DEBUG_FULLOPT=y CONFIG_DEBUG_HARDFAULT_ALERT=y CONFIG_DEBUG_SYMBOLS=y @@ -60,6 +59,7 @@ CONFIG_DEFAULT_SMALL=y CONFIG_DEV_FIFO_SIZE=0 CONFIG_DEV_PIPE_MAXSIZE=1024 CONFIG_DEV_PIPE_SIZE=70 +CONFIG_EXAMPLES_CALIB_UDELAY=y CONFIG_EXPERIMENTAL=y CONFIG_FAT_DMAMEMORY=y CONFIG_FAT_LCNAMES=y @@ -82,7 +82,6 @@ CONFIG_HAVE_CXXINITIALIZE=y CONFIG_I2C=y CONFIG_I2C_RESET=y CONFIG_IDLETHREAD_STACKSIZE=750 -CONFIG_LIBC_FLOATINGPOINT=y CONFIG_LIBC_LONG_LONG=y CONFIG_LIBC_STRERROR=y CONFIG_MEMSET_64BIT=y diff --git a/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_can.cpp b/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_can.cpp index d3a7c25439..92720faa24 100644 --- a/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_can.cpp +++ b/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_can.cpp @@ -263,7 +263,11 @@ int CanIface::computeTimings(const uavcan::uint32_t target_bitrate, Timings &out /* * Hardware configuration */ +#ifdef STM32_FDCANCLK const uavcan::uint32_t pclk = STM32_FDCANCLK; +#else + const uavcan::uint32_t pclk = STM32_HSE_FREQUENCY; +#endif static const int MaxBS1 = 16; static const int MaxBS2 = 8;