本帖最后由 snikeguo 于 2024-6-23 23:19 编辑
我测试时发现,如果只测试前4M的话, 数据是对的,只要超过4M,比如4M+4字节,4M+8字节,那么数据就不对了,
STM32H723ZGT6 主频550M,FMC3分频,275M/3=91M,配置参数:
如图所示,
[C] 纯文本查看 复制代码 hsdram1.Instance = FMC_SDRAM_DEVICE;
/* hsdram1.Init */
hsdram1.Init.SDBank = FMC_SDRAM_BANK1;
hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_9;
hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_13;
hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;
hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_3;
hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;
hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1;
/* SdramTiming */
SdramTiming.LoadToActiveDelay = 3;
SdramTiming.ExitSelfRefreshDelay = 9;
SdramTiming.SelfRefreshTime = 7;
SdramTiming.RowCycleDelay = 7;
SdramTiming.WriteRecoveryTime = 6;
SdramTiming.RPDelay = 3;
SdramTiming.RCDDelay = 3;
自动刷新:
[C] 纯文本查看 复制代码 #define REFRESH_COUNT ((uint32_t)2122) /* SDRAM自刷新计数 */
引脚:
[C] 纯文本查看 复制代码 /** FMC GPIO Configuration
PF0 ------> FMC_A0
PF1 ------> FMC_A1
PF2 ------> FMC_A2
PF3 ------> FMC_A3
PF4 ------> FMC_A4
PF5 ------> FMC_A5
PA4 ------> FMC_D8
PA7 ------> FMC_SDNWE
PC4 ------> FMC_SDNE0
PC5 ------> FMC_SDCKE0
PF11 ------> FMC_SDNRAS
PF12 ------> FMC_A6
PF13 ------> FMC_A7
PF14 ------> FMC_A8
PF15 ------> FMC_A9
PG0 ------> FMC_A10
PG1 ------> FMC_A11
PE7 ------> FMC_D4
PE8 ------> FMC_D5
PE9 ------> FMC_D6
PE10 ------> FMC_D7
PE12 ------> FMC_D9
PE13 ------> FMC_D10
PE14 ------> FMC_D11
PE15 ------> FMC_D12
PD8 ------> FMC_D13
PD9 ------> FMC_D14
PD10 ------> FMC_D15
PD14 ------> FMC_D0
PD15 ------> FMC_D1
PG2 ------> FMC_A12
PG4 ------> FMC_BA0
PG5 ------> FMC_BA1
PG8 ------> FMC_SDCLK
PC7 ------> FMC_NE1
PD0 ------> FMC_D2
PD1 ------> FMC_D3
PD4 ------> FMC_NOE
PD5 ------> FMC_NWE
PG15 ------> FMC_SDNCAS
PE0 ------> FMC_NBL0
PE1 ------> FMC_NBL1
*/
已知,现有实际电路板有个引脚和上述描述对不上的地方就是
PC4 ------> FMC_SDNE0
实际电路板画错了,画到了某个普通IO上了,为了测试,我现在强制把这个普通CS脚拉低了:
HAL_GPIO_WritePin(SDRAM_CS_GPIO_Port,SDRAM_CS_Pin,GPIO_PIN_RESET);
请问我的问题在哪里?
|