网络通,测试flash
This commit is contained in:
67
AGENTS.md
Normal file
67
AGENTS.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# STM32F4-Base
|
||||
|
||||
## 项目概述
|
||||
|
||||
STM32F407ZGTx (Cortex-M4 FPU) 基础固件项目,集成 CH395F 以太网控制器 SPI 驱动(CH395F 自带 MAC+PHY 及 TCP/IP 协议栈固件)。
|
||||
|
||||
## 关键文件
|
||||
|
||||
| 路径 | 说明 |
|
||||
|---|---|
|
||||
| `Src/main.c` | 程序入口,初始化序列及主循环 |
|
||||
| `Src/ch395f.c` / `Inc/ch395f.h` | CH395F 以太网芯片 SPI 驱动(核心自定义代码) |
|
||||
| `MDK-ARM/STM32F407-Demo.uvprojx` | Keil MDK 项目文件 |
|
||||
| `STM32F407-Demo.ioc` | STM32CubeMX 项目源文件 |
|
||||
|
||||
## 构建
|
||||
|
||||
仅支持 Keil MDK-ARM v5 (ARMCC)。打开 `MDK-ARM/STM32F407-Demo.uvprojx` 编译。
|
||||
|
||||
- 编译器:ARMCC V5.06 update 7
|
||||
- 优化等级:`-O4` (项目级),`spi.c`/`usart.c` / HAL 源文件使用 `-O0`
|
||||
- C 标准:C99
|
||||
- 全局宏定义:`USE_HAL_DRIVER, STM32F407xx`
|
||||
|
||||
## 硬件配置
|
||||
|
||||
- **主频:** HSE 25MHz → PLL 168MHz (4/168/2)
|
||||
- **6 个 LED:** PC4, PC5, PB1, PB2, PF11, PF12(低电平点亮)
|
||||
- **CH395F:** SPI2 (PB12 CS, PB13 SCK, PB14 SDO, PB15 SDI)
|
||||
- **USART1:** PA9 TX, PA10 RX (115200bps)
|
||||
|
||||
## 启动顺序
|
||||
|
||||
```
|
||||
HAL_Init() → SystemClock_Config() → MX_GPIO_Init() → MX_USART1_UART_Init() → MX_SPI2_Init() → ch395f_reset() → ch395f_init()
|
||||
```
|
||||
|
||||
## 代码规范
|
||||
|
||||
参考 `嵌入式C语言代码规范(V1.0).md`,关键要点:
|
||||
|
||||
- 缩进:4 空格,禁止 Tab
|
||||
- 命名:小写字母+下划线;全局变量 `g_` 前缀,静态 `s_`,指针 `p_`,数组 `a_`
|
||||
- 函数注释块需包含:函数功能、入口参数、返回值、限定条件、函数说明
|
||||
- 大括号:K&R 风格(左大括号不换行)
|
||||
|
||||
## 注意
|
||||
|
||||
- `Inc/` 和 `Src/` 中 CubeMX 生成的文件(gpio, spi, usart, stm32f4xx_it, main 的骨架)带有 `USER CODE BEGIN`/`END` 标记,自定义代码应写在这些区域之间以免被 CubeMX 重新生成时覆盖
|
||||
- `ch395f.c`/`ch395f.h` 为纯手工代码,不受 CubeMX 保护
|
||||
- 每次 SPI 事务需调用 `ch395f_spi_begin()` / `ch395f_spi_end()` 包裹
|
||||
- CH395F 命令执行时序参考 `ch395f.h` 中命令码注释及 `CH395F.md`
|
||||
|
||||
## 已知问题
|
||||
|
||||
### CH395F 与 RTL8305NBI 自动协商不兼容
|
||||
|
||||
CH395F 与 RTL8305NBI-CG 直连(经网络变压器)时,自动协商始终失败(返回 `PHY_DISCONN`),但强制 100M 全双工工作正常。强制 10M 全双工同样失败。
|
||||
|
||||
**诊断结果:**
|
||||
- Auto-Neg: `0x01 (DISCONNECTED)`
|
||||
- Force 100M-FULL: `0x08 (LINK OK)`
|
||||
- Force 10M-FULL: `0x01 (DISCONNECTED)`
|
||||
|
||||
**解决方案:** 初始化协议栈后调用 `ch395f_set_phy(CH395F_PHY_100M_FULL)` 跳过自动协商。
|
||||
|
||||
**推测根因:** 不同厂家 PHY 直连时的自动协商实现差异(CH395F WCH 固件 vs RTL8305NBI Realtek 硬件),物理层正常。
|
||||
Reference in New Issue
Block a user