用SPI控制RTL8367
通常我们都是用MDC/MDIO来与RTL8367通信的,但RTL8367也提供了其他方法,所以尝试用SPI来控制RTL8367.
用RK3308的SPI1控制器与RTL8367通信

根据RTL8367的数据手册,按照时序图配置了读写,代码如下:
static int spi_write_and_read_xfer(const void *tx_buf, void *rx_buf, size_t len)
{
int ret = -1;
struct spi_device *spi = NULL;
struct spi_transfer t = {
.tx_buf = tx_buf,
.rx_buf = rx_buf,
.len = len,
.speed_hz = 2000000,
.bits_per_word = 8,
};
struct spi_message m;
spi = g_spi_info->spi;
spi_message_init(&m);
spi_message_add_tail(&t, &m);
ret = spi_sync(spi, &m);
return ret;
}
int spi_write_rtl8367_reg(u16 reg, u16 val)//写
{
u8 tx_buf[5] = {0x02,0,0,0,0};
u8 rx_buf[5] = {0xFF,0xFF,0xFF,0xFF,0xFF};
//int i=0;
if (!g_spi_info)
{
pr_err("g_spi_info is NULL\n");
return 0xFF;
}
tx_buf[0] = 0x02;
tx_buf[1] = (reg & 0xFF00) >> 8;
tx_buf[2] = reg & 0xFF;
tx_buf[3] = (val & 0xFF00) >> 8;
tx_buf[4] = val & 0xFF;
mutex_lock(&g_spi_info->lock);
spi_set_cs_pin_val(rtl8367_cs,0); //CS用的GPIO
spi_write_and_read_xfer(tx_buf,rx_buf,5);
spi_set_cs_pin_val(rtl8367_cs,1);
mutex_unlock(&g_spi_info->lock);
return 0;
}
int spi_read_rtl8367_reg(u16 reg, u16 *rdata)//读
{
u8 tx_buf[5] = {0x03,0,0,0xFF,0xFF};
u8 rx_buf[5] = {0xFF,0xFF,0xFF,0,0};
if (!g_spi_info)
{
pr_err("g_spi_info is NULL\n");
return 0xFF;
}
tx_buf[0] = 0x03;
tx_buf[1] = (reg & 0xFF00) >> 8;
tx_buf[2] = reg & 0xFF;
tx_buf[3] = 0xFF;
tx_buf[4] = 0xFF;
mutex_lock(&g_spi_info->lock);
spi_set_cs_pin_val(rtl8367_cs,0); //CS用的GPIO
spi_write_and_read_xfer(tx_buf,rx_buf,5);
spi_set_cs_pin_val(rtl8367_cs,1);
mutex_unlock(&g_spi_info->lock);
*rdata = (rx_buf[3]<<8|rx_buf[4]);
return 0;
}
用逻辑分析仪,查看了时序
读:

写:

用的模式0,发现读ID能成功,但写却没反应...
分开一个或两个字节的写也不行
时序是按照数据手册写的,感觉是对的,但是读可以,写却不行,不知道为什么,所以有些郁闷!!!
有大神遇到同样的问题?求解惑...
相关推荐
RTL8367RB应用参考电路原理图_RTL8367_电路原理图_.zip
RTL8367RB应用参考电路原理图_RTL8367_电路原理图_.zip
RTL8367RB实用5口千兆交换机。
RTL8367RB是一款LQFP128封装,高性能5 + 2端口千兆以太网交换机。集成低功耗Giga-PHY,每个端口都支持全双工10 / 100 / 1000M。外围电路简单,只需要3.3V和1.0V电源供电,一个25MHz无源晶振即可。对于特定应用,RTL8367RB支持两个额外的接口,可以将其配置为RGMII / MII接口,本工程为普通交换机,无网管功能。
RTL8367RB-CG-DataSheet,RTL8370N-VB-CGDataSheet,数据手册
RTL8367RB-CG_DataSheet和RTL8370N-VB-CGDataSheet,数据手册。
RTL8367S 5口交换芯片手册下载
RTL8367S 5口交换芯片手册下载本仓库提供 RTL8367S 5口交换芯片的手册下载,手册内容详尽,包含寄存器信息,适合硬件工程师、嵌入式开发人员以及对网络交换芯片感兴趣的开发者参考使用
RTL8367RB资料
包含RTL8367RB芯片资料和参考电路


驱动开发/核心开发
