AT32F407RGT7 外部8M晶振,系统工作200M,RMII接口接外部PHY,输出50M时钟驱动PHY.
rt-thread 4.1.1以及4.0.3系统,0.1.6 以及 0.1.4驱动,编译优化O1。
之前使用LAN8720对接RMII接以太网,LWIP 2.0.3,freemodbus 这个对接都正常,一直多个产品正常出货,不同产品使用FLASH在160~290K之间,RAM大约100K+;
最近把8720换成KSZ8863,一直调不好。最终发现,优化RAM后,RAM占用在95K以内。
当RAM配置为96K时,系统工作正常。 PING 3小时,modbus poll 测试modbus tcp扫描速度设置为0ms 30万次 都不丢包。
单纯把RAM配置为224K,其余不变(链接器都还是填96K)。modbus tcp大概每500~3000次错一次,ping几百秒丢一包。
RAM更改代码如下,在void SystemInit (void)函数开始处调用extend_sram();
#define EXTEND_SRAM_96K 0xFF
#define EXTEND_SRAM_224K 0xFE
#define EXTEND_SRAM EXTEND_SRAM_224K
void extend_sram(void)
{
/* check if ram has been set to expectant size, if not, change eopb0 */
if(((USD->eopb0) & 0xFF) != EXTEND_SRAM) //224K,96K
{
flash_unlock();
/* erase user system data bytes */
flash_user_system_data_erase();
/* change sram size */
flash_user_system_data_program((uint32_t)&USD->eopb0, EXTEND_SRAM);
/* system reset */
nvic_system_reset();
}
}
仔细翻阅了手册,查阅了多个帖子,只是知道这个RAM从96k改到224K后,FLASH的零等待区会从256K降低到128K。 没有找到有需要配置的寄存器来适应这个零等待区的改变。
为了排除其他程序的干扰,我注释了多个线程的启动代码,使得只有modbus tcp 网络必须的和系统需要保留的线程继续运行,其余线程处于init状态。 丢包依然没有改变。 尝试过更换系统版本、驱动版本,调整编译优化。也没有解决。
目前我先把RAM调到96K,勉强出了样机(系统运行后查询剩余空间不到1k了)。
由于后期程序升级需要把RAM改大。 我们的产品也大量的使用这个MCU,陆续多个产品从8720改大8863都会有这个头痛的问题。还请雅特力指导下解决故障的方向。
谢谢
|