STM32F767外接DM9000实现网络通信的FMC配置

因项目中需要使用双网口,在F767+LAN8720的方案基础上,参考原子哥F103开发板的DM9000例程,加入了DM9000作为第二个网口。

由于硬件连线完全与F103中一致,按照F103的程序,在F767中对DM9000的FMC配置如下。
F767 DM9000 FMC配置
实际测试中,发现DHCP过程中,接收数据出错,持续提示“rx error stop device”

经排查发现,是读取MRCMD指令,获取status、 rxlen后,连续读取DATA,但是递增的DM9000的SRAM地址不正常,与rxlen不符。导致下一次读取MRCMDX的地址串位,读出的既不是0x00也不是0x01,最终导致接收错误。

在DM9000初始化配置寄存器函数中,读取配置完的寄存器,读数返回正常。

但是读SRAM数据,是连续执行 *data= DM9000->DATA,也就是连续的读操作。而不是读取寄存器时,先写入寄存器名再读回寄存器值的读写操作。

因此考虑是读时序的问题。按照F103例程配置为模式1 ,读写时序相同,尝试不同的ADDSET 、 DATASET,均没有效果。继续读手册,发现模式1中RD信号没有高低切换,与DM9000手册中的读时序不相符!
F767 FMC读操作时序对照
DM9000读时序中,要求RD信号拉低之前,要有T6时间的拉高,T6>80ns。
而配置了模式1的F767 ,在连续读操作时,显然不能满足T6>80ns。 而F103配置为模式1,连续读没有出错的原因,可能是F103主频较低,两次读操作之间的while循环语句时间超过了80ns(此原因为推测,并未验证)
DM9000读时序
将F767 FMC配置为更接近DM9000读时序的模式A,果然问题解决,可以正常连接网路,不再提示错误。
最终配置程序如下:
F767 FMC配置

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值