
第 4 期:一处 SPI DMA 缺陷让陀螺读取停在半路、iNav 把陀螺改到 data-ready 中断上读取、AT32F435 要在启动时改写 SRAM 出厂位,另有两块板的配置账;每条写明整板、固件与责任落在哪一层。
b8ced559b),在同一块 TMOTORVELOXF7SE 上飞了 8 个架次,共 46.6 分钟。这块板是 STM32F722 加 ICM42688P,陀螺走 SPI1。设置是 8 kHz 陀螺与 8 kHz PID、双向 DShot600,黑盒写板载 flash。3debug[2](超时)都是 0,最长连续相同的陀螺加加速度采样是 3 到 5 个。代价是每百万次遥测读取掉 50 到 90 个边沿。ENABLE_BMI423_ALIGN_AS_ICM。这一周它没有新结论,仍开放。e0b7bb0)。10pid_process_denom = 1),电机输出是 bitbang 双向 DShot600,黑盒写板载 SPI flash。陀螺 DMA 用 DMA2 的 0 号流收、5 号流发;DShot bitbang 用 2 号与 4 号流。status 里再加一个 SPI 错误计数,环境信息里也有独立的 SPI_ERRORS。gyro_data_ready = AUTO 成了默认值。F7 的 SPI FIFO 只有 4 字节,F4 一个字节都没有,所以每次 data-ready 读取要占两条 DMA 流;找不到中断脚、target 没声明引脚或没有空闲流时,回落到原来的轮询。gyro_data_ready 设成 OFF。system_at32f43x.c 里按链接脚本的 _SRAM_SIZE 和 TARGET_FLASH_SIZE 推出目标 SRAM 配置,跟芯片用户系统数据里的 eopb0 比;不一致就解 flash 锁、擦掉用户系统数据、写 eopb0、复位。链接脚本同时加上 _SRAM_SIZE = 192。Reset_Handler 已经把栈指针设在 192 KB 的顶部,在 systemInit() 里重配 SRAM,有可能把栈一起擦掉,表现是停住或者砖化。他建议先用一个临时的安全栈指针,把这段挪到更早的位置。TARGET_FLASH_SIZE,多数 AT32 target 只定义 MCU_FLASH_SIZE,CI 已经在 SAGEATF4 上报了 -Werror=return-type;擦写的返回值没检查却无条件复位,失败时会变成复位循环;整段擦用户系统数据会带走 eopb0 以外的字段。eopb0 决定,这是机制,没有人做错;改动要处理的是固件在什么时候、用什么顺序去改这个值。eopb0 到底是什么值;重配 SRAM 与设置栈指针的先后顺序怎么排才安全;其他 AT32 板是不是也需要同样的设置。fd273c9,标题写得很直白:把 ICM42605 的中断脚改成驱动实际会读的名字。diff 只有一行:-#define GYRO_1_EXTI_PIN PC15
+#define ICM42605_EXTI_PIN PC15common_hardware.c 注册,那里取的是 ICM42605_EXTI_PIN;这颗陀螺不读 GYRO_1_EXTI_PIN,所以原来的定义被忽略,陀螺没有中断线。14ENABLE_BMI270_ALIGN_AS_ICM 1。整板 TUNERCF435,MCU 是 AT32F435G;配置里 BMI270 的驱动与 ICM42688P 的 SPI 驱动同时开着,陀螺 CS 在 PA4、中断脚 PC13、走 SPI1。5eopb0 实际值;重配 SRAM 与栈指针的先后顺序能不能改安全。github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.