作者

QQ群:852283276
微信:arm80x86
微信公众号:青儿创客基地
B站:主页 https://space.bilibili.com/208826118

参考

Marvell交换芯片88E6321/88E6320驱动总结-硬件篇
Marvell交换芯片88E6321/88E6320驱动总结-寄存器篇
Marvell 88E6390交换芯片disable自动学习功能的坑
88E6390端口Link问题BUG解决
STM32连接Marvell交换芯片88E6176的PHY
Marvell 交换芯片DSA(分布式交换架构)功能介绍
以太网交换芯片及PHY处理相关
二层交换机和三层交换机的区别
zynq and marvell dsa 88e6352 integration, device tree
zynqmp and marvell dsa 88e6320
Problem with Marvell 88E6320 connected to GEM3 in ZynqMP
Zynq and Marvell DSA integration

介绍

Marvell 88E6390是一款11端口全千兆以太网二层交换芯片,1port-8配置为千兆电口,port9-10千兆光口,88E6390x则具8个集成的1Gb IEEE802.3az PHY和两个10Gb端口,10Gb端口支持10Gbps、2.5Gbps和1Gbps速率,支持IEEE1588 1-step时间戳,支持最新Audio/Video Bridging(AVB)和Time Sensitive Networking(TSN)标准。

NO_CPU模式

在复位状态下(RESETn = low)时,设置NO_CPU引脚电平后,RESETn上升沿将锁存引脚电平。若此时NO_CPU=0则表示芯片由CPU控制,NO_CPU=1则表示芯片非CPU控制。在NO_CPU=0模式下,所有的Port在初始化时都被关闭,PHY的供电关闭,使得CPU可以在芯片工作前进行启动与配置,该引脚内部上拉,默认上电所有Port打开。为了方便,可以将NO_CPU置为1进行调试,调试通过后,考虑低功耗处理时,可以采用NO_CPU=0模式,以屏蔽不需要打开的Port。
NO_CPU模式决定了上电之后端口的默认状态

MDIO

由于88E6321本身功能强大,即可以做MAC也可以做PHY(2个Port)、SERDES(2个Port),因此虽然只是一个芯片,88E6321有两种芯片寻址模式:单芯片寻址与多芯片寻址。
通过在复位状态时设置ADDR[4:0]n引脚的电平可以设置设备地址(需要注意的是,ADDR所设置的地址为实际SMI地址的反码,即ADDR=0x1F对应的实际SMI地址为0x00,,ADDR=0x00对应的实际SMI地址0x1F)。
主控可以通过这个接口(MDC_CPU与MDIO_CPU)对88E6321进行管理。MDC_CPU最高支持20MHz,MDIO_CPU需要外接一个4.7K到10K的上拉电阻。

单芯片寻址模式:

当ADDR[4:0]n=0x1F时,进入单芯片寻址模式,此时通过内部地址直接访问,在这个模式下,88E6321会响应所有的32个SMI地址,因此必须确保他是惟一的SMI从设备,在设备寄存器映射图中,SMI设备地址地址0X03、0X04(对应Port3、4的PHY)、0X0C、0X0D(对应Port0、1的SERDES),0X10-0X16(对应Port0-Port7),0X1B-0X1D(对应特殊寄存器Global1-3)是可以直接访问的,而地址0X03、0X04(对应Port3、4的PHY)、0X0C、0X0D(对应Port0、1的SERDES),当然寄存器也可以通过使用Global2地址的SMI PHY Command和SMI PHY Data两个寄存器进行间接访问。

多芯片寻址模式:

当ADDR[4:0]n!=0x1F时,则进入多芯片寻址模式,此时,88E6321只会响应ADDR设置的地址的反码 (ADDR[4:0]的反码),同时仅有两个寄存器可以直接访问(SMI Command寄存器与SMI Data寄存器),其他寄存器则通过这两个寄存器间接访问(包括在单芯片寻址模式下间接访问的寄存器)。间接访问的函数,STM32版本,

/*!* \fn write_smi_phy_reg* \brief PHY寄存器设置*          * \param [in] ETH_HandleTypeDef *heth STM32以太网结构体定义* \param [in] uint16_t dev_addr PHY地址,单芯片寻址模式下为0x03或0x04* \param [in] uint16_t reg_addr 寄存器地址* \param [in] uint32_t reg_value 写入值* * \retval error_code_t  */
error_code_t write_smi_phy_reg(ETH_HandleTypeDef *heth, uint16_t dev_addr, uint16_t reg_addr, uint32_t reg_value)
{volatile uint16_t time_out;uint32_t smi_reg;time_out = 100;/*!*  检测当前PHY是否Busy*/do {if (HAL_ETH_ReadPHYRegister_New(heth, GLOBAL2_DEV_ADDR(0x1C), SMI_PHY_CMD_REG(0x18), &smi_reg) != ok) {ERROR_MSG("Read SMI_PHY_CMD_REG register failed");return error;}if (time_out-- < 1) {ERROR_MSG("Read SMI_PHY_CMD_REG register timed out");return error;}} while (smi_reg & SMI_BUSY(0x8000));/*!*  先将需要写入的数据写入SMI_PHY_DATA_REG,待后续写命令时完成传输*/if (HAL_ETH_WritePHYRegister_New(heth, GLOBAL2_DEV_ADDR, SMI_PHY_DATA_REG, reg_value) != ok) {return error;}smi_reg = SMI_BUSY | (dev_addr << 5) | (SMI_WRITE(0x01) << 10) | (reg_addr << 0) | (SMI_CLAUSE22 << 12);//!< 设置需要写入的命令(写命令、smi地址、phy寄存器地址、条款) By: Ouqichen 2019年2月11日/*!*  写入命令*/if (HAL_ETH_WritePHYRegister_New(heth, GLOBAL2_DEV_ADDR, SMI_PHY_CMD_REG, smi_reg) != ok) {ERROR_MSG("Write PHY_QD_REG_SMI_PHY_CMD Register Failed");return error;}return ok;
}/*!* \fn read_smi_phy_reg* \brief PHY寄存器读取*          * \param [in] ETH_HandleTypeDef *heth STM32以太网结构体定义* \param [in] uint16_t dev_addr PHY地址,单芯片寻址模式下为0x03或0x04* \param [in] uint16_t reg_addr 寄存器地址* \param [out] uint32_t *reg_value 读出值* * \retval error_code_t */
error_code_t read_smi_phy_reg(ETH_HandleTypeDef *heth, uint16_t dev_addr, uint16_t reg_addr, uint32_t reg_value)
{volatile uint16_t time_out;uint32_t smi_reg;time_out =100;/*!*  检测当前PHY是否Busy*/do {if (HAL_ETH_ReadPHYRegister_New(heth, GLOBAL2_DEV_ADDR(0x1C), SMI_PHY_CMD_REG(0x18), &smi_reg) != ok) {ERROR_MSG("Read SMI_PHY_CMD_REG register failed");return error;}if (time_out-- < 1) {ERROR_MSG("Read SMI_PHY_CMD_REG register timed out");return error;}} while (smi_reg & SMI_BUSY(0x8000));smi_reg = SMI_BUSY | (dev_addr << 5) | (SMI_READ_22(0x02) << 10) | (reg_addr << 0) | (SMI_CLAUSE22 << 12);//!< 设置需要写入的命令(读命令、smi地址、phy寄存器地址、条款) By: Ouqichen 2019年2月11日/*!*  写入命令*/if (HAL_ETH_WritePHYRegister_New(heth, GLOBAL2_DEV_ADDR, SMI_PHY_CMD_REG, smi_reg) != ok) {ERROR_MSG("Write PHY_QD_REG_SMI_PHY_CMD Register Failed");return error;}time_out =100;/*!*  检测当前PHY是否Busy*/do {if (HAL_ETH_ReadPHYRegister_New(heth, GLOBAL2_DEV_ADDR(0x1C), SMI_PHY_CMD_REG(0x18), &smi_reg) != ok) {ERROR_MSG("Read SMI_PHY_CMD_REG register failed");return error;}if (time_out-- < 1) {ERROR_MSG("Read SMI_PHY_CMD_REG register timed out");return error;}} while (smi_reg & SMI_BUSY(0x8000));/*!*  待总线不忙碌时读取数据*/if (HAL_ETH_WritePHYRegister_New(heth, GLOBAL2_DEV_ADDR, SMI_PHY_DATA_REG, reg_value) != ok) {return error;}*reg_value = smi_reg;return ok;
}

IEEE中只为PHY定义了32个寄存器地址,为了拓展寄存器地址,这里采用的页机制,其中寄存器22的[7:0]用于切换页。切换函数,

/*!* \fn read_smi_page_phy_reg* \brief 带页切换的PHY寄存器读取*          * \param [in] ETH_HandleTypeDef *heth STM32以太网结构体定义* \param [in] uint16_t port_num 端口号* \param [in] uint8_t page_num 页号码* \param [in] uint16_t reg_addr 寄存器地址* \param [out] uint32_t *reg_value 读出值* * \retval error_code_t */
error_code_t read_smi_page_phy_reg(ETH_HandleTypeDef *heth, uint8_t port_num, uint8_t page_num, uint16_t reg_addr, uint32_t *reg_value)
{error_code_t ret_value;ret_value = write_smi_phy_reg(heth, (uint16_t)port_num, SMI_PHY_PAGE_ANY_REG(0x16), (uint32_t)page_num);if (ret_value != ok)return ret_value;ret_value = read_smi_phy_reg(heth, (uint16_t)port_num, reg_addr, reg_value);return ret_value;
}/*!* \fn write_smi_phy_reg* \brief PHY寄存器设置*          * \param [in] ETH_HandleTypeDef *heth STM32以太网结构体定义* \param [in] uint16_t port_num 端口号* \param [in] uint8_t page_num 页号码* \param [in] uint16_t reg_addr 寄存器地址* \param [in] uint32_t reg_value 写入值* * \retval error_code_t  */
error_code_t read_smi_page_phy_reg(ETH_HandleTypeDef *heth, uint8_t port_num, uint8_t page_num, uint16_t reg_addr, uint32_t reg_value)
{error_code_t ret_value;ret_value = write_smi_phy_reg(heth, (uint16_t)port_num,SMI_PHY_PAGE_ANY_REG(0x16), (uint32_t)page_num);if (ret_value != ok)return ret_value;ret_value = write_smi_phy_reg(heth, (uint16_t)port_num, reg_addr, reg_value);return ret_value;
}

Marvell交换芯片88E6390驱动开发相关推荐

  1. Marvell交换芯片88E6321/88E6320驱动总结-硬件篇

    芯片特性 Marvell 88E6321/88E6320 是一个7-Port千兆以太网交换芯片.支持最新的IEEEE802.1 Audio Video Bridging标准. 芯片包含两个10.100 ...

  2. Marvell 交换芯片DSA(分布式交换架构)功能介绍

    Marvell DSA(分布式交换架构)by 韩大卫@吉林师范大学*************** 请参见 Marvell Prestera/Cheetah/xcat/lion 系列交换芯片手册获取更详 ...

  3. Marvell交换芯片88E6321/88E6320驱动总结-寄存器篇

    由于我在项目中将该芯片作为PHY和SERDES使用,因此本文内容主要还是围绕PHY和SERDES的相关功能,至于其他功能则没有进行深入研究. 工作模式 在之前的硬件篇中有提到,该芯片有两种寻址模式:单 ...

  4. RK356X系列(RK3568)GL857L芯片 USB驱动开发

    首先我们先区分一下USB几种控制器类型协议 OHCI UHCI EHCI xHCI. OHCI.UHCI都是USB1.1的接口标准,而EHCI是对应USB2.0的接口标准,最新的xHCI是USB3.0 ...

  5. TMI8150芯片驱动开发

    TMI8150芯片驱动开发 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TMI8150芯片驱动开发 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 T ...

  6. Marvell宣战博通网络交换芯片,一大波饿狼扑食而来

    origin: http://www.esmchina.com/news/article/201704051517 一大批饿狼扑食而来,基础芯片领域--网络交换芯片江湖将掀起血雨腥风. 此前,网络交换 ...

  7. MT6735芯片平台方案开发资料介绍(主板/PCBA,驱动/底层开发,软件/系统)

    MT6735平台的项目开发,还是有很多人在做的,以下是一牛网众包平台上的几个待开发的MT6735外包项目,在做MT6735平台开发的工程师,可以过来看看有没有合适的项目开发了. MT6735芯片平台方 ...

  8. Window XP驱动开发(十三) 芯片功能驱动端 (代码实现,针对USB2.0 芯片CY7C68013A)

    转载请标明是引用于 http://blog.csdn.net/chenyujing1234 欢迎大家提出意见,一起讨论! 需要源码的可以与我联系. 针对USB2.0 芯片CY7C68013A+FPGA ...

  9. ADI最新基带处理芯片 ADRV9002特性及 FPGA 驱动开发调试记录分享

    ADI的产品迭代还是非常迅速的,继ADRV9009之后,又相继退出ADRV9026,ADRV9040,射频通道数量都是呈指数倍增加,今天要介绍一款低功耗产品ADRV9002, 数据接口从高速串行口又回 ...

最新文章

  1. 2.3.7 多生产者多消费者问题
  2. Unable to resolve dependency for xxx, Could not resolve project
  3. IntelliJ IDEA for Mac 如何创建Java Web项目_创建Java EE项目_创建项目_新建项目
  4. Python部分知识点
  5. IIS服务器证书的导入 IIS 5、IIS 6、IIS 7
  6. Tensor flow 实战Google深度学习框架 笔记摘要Pthree(二)
  7. HDU 5610 Baby Ming and Weight lifting
  8. To XSS or not ? 杂谈
  9. 201671030119 唐盖强 实验十四 课程学习总结
  10. PostgreSQL在何处处理 sql查询之六十三
  11. 百度下载工具我用这两个(目前)
  12. MATLAB图像的读取和显示
  13. red5流媒体服务器系统,red5 流媒体服务器配置
  14. TwinCAT 3 安全门程序
  15. java期末大作业:记事本
  16. 零食社交 or 甜蜜陷阱?说说公司那些免费提供的零食饮料
  17. 网页表格线框html,网页设计表格单元格线条及边框设置
  18. java解决兔子_JAVA编程题-用java解决兔子问题
  19. 用python的requests获取B站评论
  20. 【VHDL语言学习笔记(二)】 4位向量加法器

热门文章

  1. 马斯克:虽然我是Rust的粉丝,但我选择C,其次是C++和Python
  2. 游戏常用算法:冒泡排序
  3. 基于Jquery实现海底掘金版打豆豆
  4. 史上最强红利指数——标普A股红利机会指数全解析
  5. Java塈百日而求新,念三番未发,其一
  6. Mermaid 类图举例 ClassDiagram 唐代传承图
  7. 华为nova4e能更新鸿蒙吗,华为nova4e禁止系统更新的方法_怎么关闭和禁用系统更新功能...
  8. 远程桌面连接时打不开计算机等,远程桌面打不开。怎么办?
  9. 近期中国互联网搜索领域纵横谈
  10. 机器自动翻译古文拼音 - 十大宋词 - 破阵子 醉里挑灯看剑 辛弃疾