本帖最后由 stefaniey 于 2023-6-8 22:04 编辑
最近在做以太网相关的电路设计,在调试过程中想添加一些功能,需要涉及到对RTL8367RB的寄存器读写操作,尝试了SPI和SMI Slave的方式,都没有成功,这里主要想请教关于SMI的问题。datasheet上关于这部分的说明在附图。
我的实现方式是用STM32F103的PB13和PB14引脚模拟SMI,输出时设置为推挽输出,输入时设置为上拉输入。smi的读写程序是参考api文件(https://github.com/BootingUp/Realtek_Unmanaged_Switch_API_V1.3.12_20171124)中的smi.c改写过来的。对寄存器进行写操作时能正常收到ACK,但进行读操作时,写入控制字节(1101100x)的最后一位(1,读;0,写)后,SDA的高电平电压会随着SCK下降沿产生立刻发生变化(3.3V--->2.4V),电平变化会在写一个字节写完后的第一个SCK下降沿恢复,后续收不到ACK。排查了很久,不知道问题所在,所以想请教各位大佬。
附上示波器测得的时序图(图里的寄存器地址是0x2010或0x12C0,接收ACK最大次数是5次),datasheet文件。
|