0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MCU/FPGA没有以太网?CH390系列MAC+PHY二合一芯片轻松来搞定

嵌入式USB开发 来源:嵌入式USB开发 作者:嵌入式USB开发 2026-03-23 12:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

目录

一、前言

二、CH390简介

2.1、框图

2.2、特点

2.3、和其他型号对比

2.4、获取资源

三、评估板

四、测试

4.1、MAC测试

4.1.1、测试发送速率

4.2、唤醒测试

4.3、LWIP测试

4.3.1、UDP测试

4.3.2、TCP服务端测试

4.3.3、TCP客户端测试

五、总结

一、前言

很多MCU可能没有以太网MAC,但是又有联网需求,此时一款MAC+PHY集一体的芯片就是刚需;类似的FPGA平台要集成MAC的IP既占用空间又需要额外IP成本,MAC+PHY芯片也特别适用于FPGA平台,省得再自己去折腾MAC。

刚好看到了沁恒的CH390系列MAC+PHY芯片,完美的解决了上述需求。CH390系列具备封装小、集成度高外围BOM简单、开发简单等优点,确实是一款小而美,解决刚需的芯片。我们本文就来分享下该款芯片。

二、CH390简介

CH390是沁恒一款自带10/100M以太网介质传输层(MAC)和物理层收发器(PHY)的工业级以太网控制器芯片,支持10BASE-T的CAT3、4、5和100BASE-TX的CAT5、6连接,支持Auto-MDIX,低功耗设计,符合IEEE 802.3u规范。CH390内置16K字节SRAM,支持并行接口和SPI串行接口,用于兼容各种MCU、MPU、DSP,FPGA等控制器。

2.1、框图

CH390的系统框图如下,集PHY+MAC于一体。

wKgZPGnAwiiASJQFACjAHouM1PA838.png

2.2、特点

CH390系列具备以下特点,下面红色部分是个人觉得比较独特的。

1)集以太网介质传输层(MAC)和物理层(PHY)一体。常规MCU+CH390也可以方便地实现以太网连接。

2)不同型号分别支持SPI、8位并口、16位并口,适合MCU和FPGA等主控使用。

wKgZO2nAwm2AGZ-QAABkvyHXth8043.png

CH390L支持8位并行接口和16位并行接口,CH390F支持8位并行接口,CH390H和CH390D支持SPI串行接口。CH390F/H具有独立的I/O电源引脚VDDIO,支持1.2V~3.3V接口电压。

3)每个芯片内置唯一的以太网MAC地址,无需另外购买或分配,无需外部EEPROM

4)集成基于DSP算法实现的低功耗10/100M收发器Transceiver。

5)支持Auto-MDIX交换TX/RX,自动识别正负信号线。

6)支持10BASE-T和100BASE-TX及自动协商。

7)支持UTP CAT5、CAT6双绞线,支持120米传输距离。

8)支持用于远程唤醒的样本帧、链路状态变化和魔法包事件。

9)支持IEEE 802.3x的流量控制。

10)支持IPv4 TCP/UDP和IPv6 TCP/UDP校验和的生成和检查。

这个特性非常有用,可以降低主控运行协议栈时的校验计算时间,极大地提高效率。我们之前有测试过协议栈跑起来很大一部分主控的消耗就是计算校验和。

11)内置50Ω阻抗匹配电阻,内置晶体振荡器所需电容,外围电路精简。这降低了BOM成本,价格敏感产品选型时这就是很大的优势。

12)支持可选的外部EEPROM配置芯片。

13)支持QFN20(CH390D)/QFN28(CH390F)/QFN32X5(CH390H)/LQFP48(CH390L),QFN20封装尺寸才3x3mm,特别适合空间受限应用场景。

2.3、和其他型号对比

市面上也能搜到其他厂家的类似的芯片比如DAVICOM的DM9000和DM9051,和CH390的对应如下。

wKgZO2nAwq-ABgQqAADq7WaC6aM873.png

CH390H引脚兼容DM9051,CH390L引脚兼容DM9000。可以看到CH390的特点、优点还是很明显的,CH390有更宽的VIO电压域、更低的运行功耗,更小的封装尺寸,更高的集成度(BOM要求简单成本低),并提供MAC地址。

2.4、获取资源

官网提供了相关的资料,可从如下地址下载:

资源包:包括CH390评估板说明,原理图及参考例程等内容。

https://www.wch.cn/downloads/CH390EVT_ZIP.html

数据手册:

https://www.wch.cn/downloads/CH390DS1_PDF.html

三、评估板

评估板实物图如下,我手里的是CH390D,就以该评估板配合自己的主控开发板来进行相关功能的测试。

wKgZPGnAwriAFROuADdf7C-ym8Y244.png

原理图如下:

可以看到外围器件超级简单,CH390D外围只需要5个电容加一个25MHz晶体,降低了BOM成本,同时PCB布局布线也很简单,占用空间也小。

网络变压器这边只需要两个电阻和两个电容。

wKgZO2nAws-AWu-HADLbp4G-nZM280.png

wKgZPGnAwtyAAje5ACkelQqFzwU627.png

四、测试

4.1、MAC测试

这里使用STM32F103ZET6的开发板测试,使用Demo:EVTEXAMNET_MACNET_MAC.uvprojx。

我这里用的是MDKV5.43默认ARMCC编译器版本是版本6,需要配置为对应版本。

wKgZO2nAwuiADK1AADfLea9o_4o295.pngwKgZPGnAwu-AAdvcADfLeVTiGmg578.png

切换到编译器版本6,编译会提示

../SRC/CMSIScore_cm3.h(1204):error:unknowntypename'inline'

等错误

需要更新CMSIS,更新core_cm3.h为

https://github.com/ARM-software/CMSIS_6/blob/main/CMSIS/Core/Include/core_cm3.h

删除core_cm3.c

添加以下文件

https://github.com/ARM-software/CMSIS_6/blob/main/CMSIS/Core/Include/cmsis_version.h
https://github.com/ARM-software/CMSIS_6/blob/main/CMSIS/Core/Include/cmsis_compiler.h
https://github.com/ARM-software/CMSIS_6/blob/main/CMSIS/Core/Include/cmsis_armclang.h
https://github.com/ARM-software/CMSIS_6/blob/main/CMSIS/Core/Include/m-profile/cmsis_armclang_m.h

还提示NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;错误则

NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;

改为

NVIC->IPR[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;

CH390.h中选择接口模式

我这里使用SPI,如果支持并口可配置对应的接口,


#define CH390_INTERFACE_SPI     // CH390H/CH390D
// #define CH390_INTERFACE_8_BIT   // CH390L/CH390F 8-bit mode
// #define CH390_INTERFACE_16_BIT  // CH390L 16-bit mode

如果并口支持FSMC还可以使用FSMC,可以极大提高效率。

#defineUSE_FSMC 1

对应使用的引脚如下

#define CH390_INT_PIN GPIO_Pin_0 // PA0
#define CH390_RST_PIN GPIO_Pin_1 // PA1
#define CH390_CS_PIN GPIO_Pin_4 // PA4
#define CH390_SCK_PIN GPIO_Pin_5 // PA5
#define CH390_MISO_PIN GPIO_Pin_6 // PA6
#define CH390_MOSI_PIN GPIO_Pin_7 // PA7
#define CH390_WOL_PIN GPIO_Pin_8 // PA8

默认调试串口为USART1 PA9/PA10


#ifndef DEBUG
#define DEBUG DEBUG_UART1
#endif

接线如下

wKgZO2nAwv6AH0fDAHclhufyZ4I878.png

运行后打印如下,打印状态以及收到的数据包,说明收发正常。

wKgZPGnAwwaANHIoAFtUVtnL69c923.png

4.1.1、发送测试

使用STM32F103的SPI1,时钟来源于APB2(72MHz)。

CH390_Interface.c中配置分频

SPI_InitStructure.SPI_BaudRatePrescaler= SPI_BaudRatePrescaler_2;

STM32F103最大可配置为

2分频36MHz, CH390实际支持最大72MHz。

main.c中ch390_int_handler下注释掉打印

//print_packet(receive_buff, length);

main.c中可以修改一次发送大小

#defineTEST_DATA_LEN 1500

main函数中连续发送

/**

* @brief Main program

* @param None

* @retval None

*/

int main(void)

{

//Delay_Init();

SysTick_Config(SystemCoreClock/1000);

NVIC_EnableIRQ(SysTick_IRQn);

USART_Printf_Init(115200);

ch390_gpio_init();

#ifdef CH390_INTERFACE_SPI

ch390_spi_init();

#endif

ch390_hardware_reset();

// Don't read/write CH390 registers within 10ms after power on

Delay_Ms(10);

ch390_default_config();

ch390_print_info();

init_packet_data();

while (1)

{

if (ch390_get_int_pin())

{

ch390_int_handler();

}

if (phy_linked)

{

ch390_send_packet(packet_data, TEST_DATA_LEN);

}

}

}

以上简单测试一下。CH390使用SPI时最大支持72M时钟, 网上看到用CH390单发速度有68.6Mbps,可能的优化方向是,提高SPI时钟频率到最大72MHz,优化SPI发送接口比如使用DMA等。 也可以使用8/16位并口的型号,使用fsmc提高效率。

4.2、唤醒测试

使用Demo:EVTEXAMWakeOnLanWakeOnLan.uvprojx

关键代码如下

配置GPIO引脚输入中断,这里用PA8,中断可唤醒MCU:

ch390_interrupt_init(); 

配置CH390唤醒帧过滤器:


sample_frame_filter_config(); 
// Enable magic packet and sample packet wake up

配置帧唤醒事件

ch390_wakeup_config(WCR_MAGICEN | WCR_SAMPLEEN);

每收到5包,配置CH390进入等待唤醒状态,MCU进入WFI状态,如果唤醒则产生WOL中断,触发MCU唤醒继续执行。


// Sleep every 5 packets received
if(receive_count >= 5)
{
  receive_count = 0;
  ch390_wake_notify();
  printf("Sleeprn");
  __WFI();
  printf("Wake on LAN!rn");
}

运行打印如下

wKgZO2nAwxuAZrcCAGJawbRmkW4848.png

4.3、LWIP测试

使用Demo:EVTEXAMLwIP_ExampleLwIP_Example.uvprojx

Cc.h中


typedef unsigned long    u32_t;
typedef signed long    s32_t;

改为


typedef unsigned int    u32_t;
typedef signed int    s32_t;

开发板IP配置IP4_ADDR(&ipaddr, 192, 168, 1, 120);

所以电脑配置为同网段192, 168, 1, 119

main.c中可以配置是否使能DHCP,这里不使能

#defineUSE_DHCP 0

4.3.1、UDP测试

main.c中测试udp收发


udpecho_init();
//tcp_client_init();
//tcp_server_init();

本地端口是2300,远程端口是1000


void udpecho_init(void)
{
  udp_echo_pcb = udp_new();
  udp_bind(udp_echo_pcb, IP_ADDR_ANY, 2300);
  udp_connect(udp_echo_pcb, IP_ADDR_ANY, 1000);
  udp_recv(udp_echo_pcb, udpecho_recv, NULL);
}

上位机中使用网络调试助手收发测试,开发板收到数据原样返回,测试功能正常。

wKgZPGnAwyWASX-JAEowc9L4qVY493.png

4.3.2、TCP服务端测试


//udpecho_init();
//tcp_client_init();
tcp_server_init();

开发板收到数据原样返回,使用上位机调试助手,测试收发如下,功能测试正常。

wKgZPGnAwyuAP7_yAEowczmOBdA852.png

4.3.3、TCP客户端测试


//udpecho_init();
tcp_client_init();
//tcp_server_init();

如下函数中修改服务端地址和端口

void tcp_client_init(void)
{
  extern struct netif ch390_netif;
  ip4_addr_t server_ip;
  uint16_t server_port = 2200;
  IP4_ADDR(&server_ip, 192, 168, 1, 119);
  tcp_client_pcb = tcp_new();
  if (tcp_client_pcb == NULL)
  {
    printf("tcp_new errorn");
    return;
  }
  tcp_bind(tcp_client_pcb, IP_ANY_TYPE, 0);
  tcp_err(tcp_client_pcb, tcp_client_error);
  tcp_connect(tcp_client_pcb, (const ip_addr_t *)&server_ip,
  server_port, tcp_client_connected);
}

开发板收到数据原样返回,使用上位机调试助手,测试收发如下,功能测试正常。

wKgZO2nAwzSAI1PyAEowc_8Ws98980.png

五、总结

从上可以看出CH390集成MAC+PHY,适用于无MAC的MCU和FPGA等主控快速实现以太网连接。CH390有较宽的VIO电压域、较低的功耗、小的封装尺寸、高的集成度(BOM要求简单成本低)、提供MAC地址等明显的优点,是相应需求时非常不错的选择。有了该芯片,妈妈再也不用担心我无MAC的MCU和无MAC IP的FPGA联网了。

官方提供了STM32F103的例程,可以直接基于此实现以太网RAW、UDP、TCP数据收发的应用,其他平台移植也很简单,只需要实现简单的接口替换即可。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 以太网
    +关注

    关注

    41

    文章

    6291

    浏览量

    181925
  • Mac
    Mac
    +关注

    关注

    0

    文章

    1131

    浏览量

    55664
  • PHY
    PHY
    +关注

    关注

    2

    文章

    342

    浏览量

    54437
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于Xilinx FPGA的千兆以太网控制器的开发

    MAC子层的FPGA设计、MAC子层与上层协议的接口设计以及MAC与物理层(PHY)的MII接口设计。##Xilinx 提供了三态
    发表于 01-23 11:13 3.2w次阅读
    基于Xilinx <b class='flag-5'>FPGA</b>的千兆<b class='flag-5'>以太网</b>控制器的开发

    文详解以太网MAC芯片PHY芯片

    MII即媒体独立接口,它是IEEE-802.3定义的以太网行业标准."媒体独立"表明在不对MAC硬件重新设计或替换的情况下,任何类型的PHY设备都可以正常工作.它包括个数据接口,以及
    发表于 02-19 10:47 7293次阅读
    <b class='flag-5'>一</b>文详解<b class='flag-5'>以太网</b><b class='flag-5'>MAC</b><b class='flag-5'>芯片</b>与<b class='flag-5'>PHY</b><b class='flag-5'>芯片</b>

    STM32F429NI是否具备以太网MAC+PHY,无需外接PHY芯片

    STM32F429NI是否具备以太网MAC+PHY,无需外接PHY芯片
    发表于 04-07 08:55

    PHY芯片 /MAC+PHY芯片选型

    本人刚刚接触通信行业,正在寻找款基于同轴电缆传输介质、同时适用于EBI/SPI总线的10Mbps传输速率的以太网PHY芯片/MAC+PHY
    发表于 10-06 17:04

    连接的以太网、USB 和 LCD 参考设计TIDM-CONNECTED-ETHERNET

    上的集成以太网 MAC+PHY提供 USB 全速和 USB 高速 ULPI 接口方便易用的 3.5 英寸 LCD 触摸屏显示器兼容的扩展接口,包括 Boosterpack
    发表于 07-31 06:26

    以太网MAC芯片PHY芯片的关系是什么

    如何实现单片以太网微控制器?以太网MAC是什么?什么是MII?以太网PHY是什么?网卡上除RJ-45接口外,还需要其它元件吗?造成
    发表于 12-28 06:22

    以太网芯片MACPHY的关系 精选资料分享

    问:如何实现单片以太网微控制器?答:诀窍是将微控制器、以太网媒体接入控制器(MAC)和物理接口收发器(PHY)整合进同
    发表于 07-29 09:22

    以太网芯片MACPHY有何关系

    网卡的主要工作原理是什么?网卡主要分为哪几类?以太网芯片MACPHY有何关系?
    发表于 09-22 06:28

    RK3288搭配以太网PHY芯片需要注意哪些

    (1)以太网PHY芯片驱动及接口瑞芯微在设计RK 系列主控芯片时,有内置以太网
    发表于 08-31 17:15

    德州仪器推出业界首个支持以太网MAC+PHY的Tiva C系列MCU

    10 月 30日,北京讯——日前,德州仪器 (TI) 宣布为 Tiva™C 系列微控制器 (MCU) 平台新增最新产品。这些 Tiva TM4C129x MCU 是业界首批具有以太网
    发表于 10-31 09:42 1282次阅读

    英特尔低延迟 40G 以太网 MACPHY IP的延迟计算

    计算英特尔低延迟 40G 以太网 MACPHY IP 的延迟
    的头像 发表于 06-20 00:18 7520次阅读
    英特尔低延迟 40G <b class='flag-5'>以太网</b> <b class='flag-5'>MAC</b> 和 <b class='flag-5'>PHY</b> IP的延迟计算

    车载以太网MACPHY的问题详解

    问:如何实现单片 以太网微控制器 ?答:诀窍是将微控制器、以太网 媒体接入控制器 (MAC )和物理接口收发器 (PHY )整合进同
    发表于 06-02 08:00 5次下载
    车载<b class='flag-5'>以太网</b><b class='flag-5'>MAC</b>和<b class='flag-5'>PHY</b>的问题详解

    以太网——PHYMAC、MII与网卡

    芯片称之为PHY,数据链路层的芯片称之为MAC控制器。本文旨在学习以太网基础MAC
    的头像 发表于 12-02 10:52 4602次阅读
    <b class='flag-5'>以太网</b>——<b class='flag-5'>PHY</b>、<b class='flag-5'>MAC</b>、MII与网卡

    车载以太网基本原理 常见以太网线束分类

    车载以太网技术是在我们消费领域的以太网技术上发展过来的,是在物理层进行了优化以适应汽车电子要求的种技术。 我们常用的以太网和车载以太网主要
    发表于 07-03 12:48 1.1w次阅读
    车载<b class='flag-5'>以太网</b>基本原理 常见<b class='flag-5'>以太网</b>线束分类

    常见以太网PHY-MAC接口的模式有哪些?

    以太网链路包含MAC控制器、PHY芯片、网络变压器和RJ45接头组成,有的系统会有DMA控制。般的系统中CPU和
    发表于 08-21 09:23 4421次阅读
    常见<b class='flag-5'>以太网</b><b class='flag-5'>PHY-MAC</b>接口的模式有哪些?