ksz8863调试总线,

ksz8863是一款交换芯片,结构如下:

ksz8863调试总线,_第1张图片

有2个完整的MAC + PHY, 还有第三路网口,只有一个MAC3,右边是switch逻辑,下边是控制接口,支持i2c/spi/smi

1.片子的rmii/mii接口支持2种模式,  MAC 模式  加 PHY 模式,  注意,工作模式是相对于它自身所起的功能所说的,如果它是通过rmii接stm32f437的MAC,它起到一个外置PHY的作用,那它用的就是PHY模式。这也是KSZ8863复位后处于的模式,常用模式。

2.测试过程中,有时候10M通,有时候100M通,终于找到问题了,  必须通过I2C/SPI/SMI来控制REG_SWITCH_CTRL_4寄存器写入SWITCH_10_MBIT位。
    感觉KSZ8863的MDIO不需要设置,直接就能通。  想想应该也是这样的,一个交换机,就应该是傻瓜级的,如果是简单应该就不应该配置。 
    但10/100为什么 不做成自适应的呢?看来网上的教程大部分都是错误 的。

我的RSTN引脚没有使用,造成硬复位不正常。

3 switch逻辑如果复位不完整的话,值是不定的。最好是通过i2c/spi/smi接口来写入确定的值。

4。最坑的接口smi,这个接口STM32是不支持,这也不是标准的接口,

标准的SMI接口是这样的

ksz8863调试总线,_第2张图片

写OP码是 01  读OP码是10,   但ksz8863却自作聪明搞了个00的OP码,  让我误以为大家都支持呢,  经过我的研究,STM32F4XX寄存器层面就不支持,  STM32H7XX寄存器层面支持但实际也不支持,也就是说在STM32平台OP码这个位置永远不会出现00,

下面是KSZ8863要求的SMI时序。应该很少平台能支持。

ksz8863调试总线,_第3张图片

SMI接口不能用,那最方便的就是直接把MDC MDIO配置为I2C接口,STM32平台 那2引脚不能配置I2C, 那我就使用软件模拟的方法成功的读到了KSZ8863的ID号   0x88.

后面就很顺利的。

 

后续: 总线调通之后 ,又把linux下ksz8863的驱动移植到stm32下, 片子很简单,但驱动结构相当复杂。主要是因为ksz8863这个片子的功能相当强大, 一大堆寄存器, 能实现很多功能,但在简单应用时完全可以不用,也就是硬件连好之后就通了,基本功能就有。

你可能感兴趣的:(mcu)