【KSZ8863】KSZ8863交换机芯片的信息汇总与打板验证结果

前提

对STM32双网口实现的方案的继续探究,比较多见的都是

  1. W5500
  2. DM9000
  3. ENC28J60

通过研究,我还发现了一类比较少见但是灵活的方案
交换机芯片
也就是本文提到的这个KSZ8863

一颗LQPF48脚的3口10/100M的以太网交换芯片

目前(21年9月份)在立创上的价格是:
在这里插入图片描述
简单说就是这芯片就实现了一个三口管理型交换机…而且价钱还算比较OK,当然现在疫情的原因,买不到/要订货啥的我也不意外。

最新进展

23年 5月
总觉得这个事情没有完成觉得不甘心呀
立创上终于有货了。又打了一次
这次我试了试IIC
但是还是不行。。。。
于是我托人请了微芯的FAE来指导
结果发现!!
我可能之前为了好走线,把板子PCB上的接线插针的丝印写错了
导致我接线没有接对
其实板子画的是对的
在这里插入图片描述
在它指导下,我尝试用IIC去读了寄存器,可以读出来了
我尝试读了0-8号寄存器,用RTT工具打出来
IIC通信正常
我估计前面SPI那个接线不行
估计和这个丝印错了有关系
这个翻车翻得真是始料未及~~
以前方向错了,一直怀疑芯片有问题(也确实FAE说他感觉那个芯片丝印也是有点不正常,但是他也不确定)


也算是给自己一个交代了,不想搞了,不知道SPI的配置功能到底为啥不行~~

22年6月底第二次打板
4. 22年6月底第二次打板,我重新再认真读了官方模块的手册和数据手册,改了下原理图,SPI还是类似的现象,还是读不出…呜呜呜
相较上一版本,加了一个LDO,优化走线布局,认真的理了理SPI部分的走线,结果还是读不出来,真的是很无奈~~~
在这里插入图片描述

这次读出来的不是FF了,好像是主机发什么,它就返回什么,02指令和03指令都试了
抛开这个配置,交换机本身的功能是可以的,这个没啥好说,这次打板PCB没有改这部分。。。

在这里插入图片描述
在这里插入图片描述


22年2月第一次打板

  1. 网络似乎是能够通信上(脱开开发板,2个口与电脑双向PING通(普通交换机功能),接上开发板的RMII接口,开发板通过 RMII接口可以与电脑正常网络通信,两个口单独使用都可以,但是两个口一起插网线,驱动挂了,可能要改驱动(驱动基于LAN8720))
  2. SPI配置功能没调通,RMII接口读PHY的信息都读不到,不知道原因,但是网络通信却是正常的.
  3. 驱动可能要研究下LWIP多个网卡怎么搞?

疑点1-RMII接口

似乎原生驱动LAN8720的程序好像没有使能MDIO这个外设??那LAN8720是如何在仅仅初始化了RMII接口之后获得到PHY相关的信息的了?

看H743的手册,我好像有点明白了~~~
H743的网络接口有三种
a) RMII(目前用的)
b) SMA(站管理模式)
c) MII

SMA接口就是需要使用MDIO和MDC数据线传输数据的方式与PHY芯片通信的
在这里插入图片描述
通信的数据帧格式和交换机芯片的一致
在这里插入图片描述
这个是可以设置时钟的
在这里插入图片描述
在RTT LAN8720驱动代码里,确实找到了这样一句HAL驱动函数的调用
在这里插入图片描述

void HAL_ETH_SetMDIOClockRange(ETH_HandleTypeDef *heth)
{
  uint32_t tmpreg, hclk;

  /* Get the ETHERNET MACMDIOAR value */
  tmpreg = (heth->Instance)->MACMDIOAR;

	/* Clear CSR Clock Range bits */
  tmpreg &= ~ETH_MACMDIOAR_CR;

	/* Get hclk frequency value */
  hclk = HAL_RCC_GetHCLKFreq();

	/* Set CR bits depending on hclk value */
  if((hclk >= 20000000U)&&(hclk < 35000000U))
  {
    /* CSR Clock Range between 20-35 MHz */
    tmpreg |= (uint32_t)ETH_MACMDIOAR_CR_DIV16;
  }
  else if((hclk >= 35000000U)&&(hclk < 60000000U))
  {
    /* CSR Clock Range between 35-60 MHz */
    tmpreg |= (uint32_t)ETH_MACMDIOAR_CR_DIV26;
  }
  else if((hclk >= 60000000U)&&(hclk < 100000000U))
  {
    /* CSR Clock Range between 60-100 MHz */
    tmpreg |= (uint32_t)ETH_MACMDIOAR_CR_DIV42;
  }
  else if((hclk >= 100000000U)&&(hclk < 150000000U))
  {
    /* CSR Clock Range between 100-150 MHz */
    tmpreg |= (uint32_t)ETH_MACMDIOAR_CR_DIV62;
  }
  else /* (hclk >= 150000000)&&(hclk <= 200000000) */
  {
    /* CSR Clock Range between 150-200 MHz */
    tmpreg |= (uint32_t)ETH_MACMDIOAR_CR_DIV102;
  }

  /* Configure the CSR Clock Range */
  (heth->Instance)->MACMDIOAR = (uint32_t)tmpreg;
}

似乎目前HAL库里面是关联了HCLK时钟的

有没有可能是因为芯片的HCLK时钟设置的比较高,导致对应这个MDIO的时钟设置的过高(超过了5MHz)导致访问交换机芯片读出的内容都有问题
应该不是的,用 LAN8720的驱动打断点看了函数的执行
HCLK 200Mhz, 它是走了CSR/102这个分支,对应算下来MDC时钟应该不超过3MHz,应该是没有超过5Mhz的上限。

在这里插入图片描述
在这里插入图片描述

或者说还有一种可能

因为LAN8720是使用RMII接口驱动。 实际上RMII接口下,MDIO实际上并没有使用,也没有初始化呢,导致读取的值都是异常值?
应该不会,因为LAN8720的网线断开插入后重新连接应该是会用到MDIO查询PHY的,不可能RMII接口不联动这个MDIO,不然这个重新连接怎么实现的呢?

在这里插入图片描述
单独做了一个只有MDIO接口的工程,尝试读了,也是读不出来.


疑点3-SPI接口

难道SPI驱动那里驱动没调好???

再次用CubeMx单独做了个15MHz/7.5MHz的SPI4接口(模式0和模式3)的工程分别试了试
用逻辑分析仪抓了通信,读出来都是FF
在这里插入图片描述
跟它提供的多字节读的波形应该对的上呀,但是读不出来?
在这里插入图片描述
难道说SPI接口的线和板子的电源层短路了,所以被拉高?
这个也拿万用表量了引脚和VCC,也没有短路,引脚也是通到了座子上的
上次调也有试过下掉MISO/MOSI这两条上拉电阻,拿USB转SPI仪器去读,也是读不出来,全是FF

看来是无解了


原理图,送给大家(这个要积分哈),虽然有点问题,但是单纯做交换机本身还是可以用的
说不定有大佬能够搞明白哪里画的不对,能够解决上面的问题

自己画的原理图


22.2.25
‌1. spi读不到任何数据,全是ff,手册说要用模式0或者3来读,都试了,也换了SPI频率,都是一样,读不出任何东西,都是FF。
在这里插入图片描述

试了12M,24M的SPI频率都不行,都是读出来都是FF(这里忘记截图了,现象很奇怪)
在这里插入图片描述
指令说是"3"是数据读,"2"是数据写
但是它下面给 的波形图,好像又不是这样的,“2”和"3"我都试过了,都不行…
在这里插入图片描述

读和写都是"2"???
在这里插入图片描述
在这里插入图片描述

板子这边我也是参考这个官方核心板的原理图上的说法做的
SPI接口: P2LED1不用下拉(NG不贴),P2LED0.1K下拉到地
在这里插入图片描述
SPI接口: P2LED1不用下拉(NG不贴),P2LED0.1K下拉到地

在这里插入图片描述
手册也说,配置模式,就是上电,复位完毕时候读取这两引脚的状态,决定配置的方式。
在这里插入图片描述
反正就是啥也读不出,不知道为啥…

‌2. 网络部分,rtt的lan8720驱动把读软复位的功能去掉之后,网络是通的,只要不同时两个口插网线,只要插了双网线,驱动会有问题(问题 可能是原来只注册了一个网卡,两个网卡同时在的话,它就会有异常了).

双向ping都是通的,但是用mdio口读芯片的phy寄存器信息全部是FFFF…有点怀疑是不是芯片有问题(X宝买的,目前X宝有卖,立创买不到,没办法),原来给LAN8720配PHY地址原来是0,然后试过1,2,3,好像都可以ping的通,网络也是正常的**(按手册描述,应该是3才对(3对应的是RMII接口),1和2是它外扩的RJ45)**。
在这里插入图片描述


22.2.23
半年工作比较忙,终于有空把所有信息整合,画原理图,PCB,打样,把初版核心板制作出来了

后期如果调通完,我就放出原理图

先晒下效果。。
先是板子,我引出了RMII接口和SPI管理接口和电源接口
唯一小遗憾的是应该加一个LED电源指示灯,因为它上电以后,不插网线的情况下,是没有任何反应的
在这里插入图片描述
插上网线的效果(一头接交换机,一头接PC)
在这里插入图片描述
PC端显示网络正常(100M),网络通信也是正常的!!因为我是在内网环境下,我试着访问了内网的一个服务器也是正常的。
在这里插入图片描述


芯片信息汇总

(我会提供这些收集到的文档和资料在我的csdn,不要积分下载):
https://download.csdn.net/download/tpoem/21883787

手册在微芯官网上可以查
在这里插入图片描述
原理框图大概是这样的

一共三个MAC,两个PHY。
其中MAC3是可以通过RMII/MII接入处理器或者PHY芯片的[手册24页],它下面也附录了接的方法
在这里插入图片描述

MII/RMII的解法

microchip收购了micrel这个牌子,所以KSZ系列芯片以前是这个公司的
在这里插入图片描述
在这里插入图片描述

接PHY或者MAC的方法

在这里插入图片描述
接的时候也有一些坑的地方
注意看这个表格,Clock Source那里,有特殊的接线的描述
在这里插入图片描述

关于RX_ER的问题

它这个芯片没有提供EX_ER信号出,它自身过滤了错误帧,它有特殊的做法
在这里插入图片描述
在这里插入图片描述

关于MII 管理帧格式和SMI管理帧格式

MII管理帧格式如下(这个就是芯片提供的MII/RMII接口的那个MDC/MDIO的通信协议)
在这里插入图片描述
看H743的描述理论上应该式可以用MDIO与交换机通信的
但是交换机芯片对MDIO时钟有限制(最大5MHz)
在这里插入图片描述

在这里插入图片描述

关于供电

这个芯片需要3.3V+1.8V供电(这个芯片内置1.8V LDO),它1.8V的引脚有特殊接法【磁珠隔离数字电源和模拟电源】
在这里插入图片描述
这个在微芯官方的8863模块(它是RMII接口输出的)上也有体现
来源于这个文档在这里插入图片描述

在这里插入图片描述

关于网络变压器和网口选择

上面这个官方模块用的是一个带隔离变压器的双口RJ45座子,手册和它官方的原理图上都提供了推荐网络变压器选型,至于RJ45座子,这个可能要采取类似于官方模块这种变压器构型的或者无变压器的座子吧
在这里插入图片描述
其中这个型号立创上有卖,还挺多货,可以!!
在这里插入图片描述
在这里插入图片描述

关于配置交换机的功能

芯片支持必要的网管功能,可以通过SPI/SMI/I2C配置,还可以将配置写到一片外部的EEPROM(24Cxx)上,实现配置信息自动加载,无管理交换机的功能。

芯片上电启动或者复位后的时候会优先从外部EEPROM读配置信息,然后引脚恢复成其他功能。
或者直接用I2C读芯片的所有寄存器
在这里插入图片描述
在这里插入图片描述

关于外部EEPROM的配置信息如何制作

这里参考这个链接,官方其实做了一个小工具
EEPROM的配置信息制作
在这里插入图片描述
在这里插入图片描述

其他

看到个实验成功的博主的帖子

  • 9
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
KSZ8863是一款以太网交换机芯片,通过提供多种功能来实现局域网内计算机之间的高效通信。当我们说KSZ8863 ping掉包时,意味着在使用该芯片的网络环境中,进行ping测试时存在包丢失的问题。 ping测试是用于测量计算机网络上的延迟和丢包情况的一种常见方法。通常,我们在网络中ping一个地址,以确定与目标地址的通信是否正常。如果存在掉包的情况,说明在从本地计算机到目标地址的通信链路上发生了问题。 KSZ8863 ping掉包可能是由多种因素引起的。首先,可能是由于网络链路的故障,例如网络连接不稳定、网络线路质量差或者网络设备故障。其次,可能是由于KSZ8863芯片本身出现问题,例如硬件故障或者软件配置错误。此外,如果网络流量过大,也可能导致KSZ8863无法及时处理所有的数据包,从而出现掉包现象。 解决KSZ8863 ping掉包的问题需要逐个排查可能的原因。首先,我们应该检查网络链路,确保网络连接正常,更换网络线路或者设备以排除故障。其次,我们可以尝试重新配置KSZ8863芯片的相关参数,确保其正常运行。此外,如果网络流量过大,可以考虑优化网络带宽或者增加交换机的处理能力,以提高网络的性能。 总之,KSZ8863 ping掉包是一种常见的网络问题,需要通过检查网络链路、重新配置芯片参数以及优化网络带宽等方法来解决。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值