目錄
一、前言
二、CH390簡介
2.1、框圖
2.2、特點
2.3、和其他型號對比
2.4、獲取資源
三、評估板
四、測試
4.1、MAC測試
4.1.1、測試發(fā)送速率
4.2、喚醒測試
4.3、LWIP測試
4.3.1、UDP測試
4.3.2、TCP服務(wù)端測試
4.3.3、TCP客戶端測試
五、總結(jié)
一、前言
很多MCU可能沒有以太網(wǎng)MAC,但是又有聯(lián)網(wǎng)需求,此時一款MAC+PHY集一體的芯片就是剛需;類似的FPGA平臺要集成MAC的IP既占用空間又需要額外IP成本,MAC+PHY芯片也特別適用于FPGA平臺,省得再自己去折騰MAC。
剛好看到了沁恒的CH390系列MAC+PHY芯片,完美的解決了上述需求。CH390系列具備封裝小、集成度高外圍BOM簡單、開發(fā)簡單等優(yōu)點,確實是一款小而美,解決剛需的芯片。我們本文就來分享下該款芯片。
二、CH390簡介
CH390是沁恒一款自帶10/100M以太網(wǎng)介質(zhì)傳輸層(MAC)和物理層收發(fā)器(PHY)的工業(yè)級以太網(wǎng)控制器芯片,支持10BASE-T的CAT3、4、5和100BASE-TX的CAT5、6連接,支持Auto-MDIX,低功耗設(shè)計,符合IEEE 802.3u規(guī)范。CH390內(nèi)置16K字節(jié)SRAM,支持并行接口和SPI串行接口,用于兼容各種MCU、MPU、DSP,F(xiàn)PGA等控制器。
2.1、框圖
CH390的系統(tǒng)框圖如下,集PHY+MAC于一體。

2.2、特點
CH390系列具備以下特點,下面紅色部分是個人覺得比較獨特的。
1)集以太網(wǎng)介質(zhì)傳輸層(MAC)和物理層(PHY)一體。常規(guī)MCU+CH390也可以方便地實現(xiàn)以太網(wǎng)連接。
2)不同型號分別支持SPI、8位并口、16位并口,適合MCU和FPGA等主控使用。

CH390L支持8位并行接口和16位并行接口,CH390F支持8位并行接口,CH390H和CH390D支持SPI串行接口。CH390F/H具有獨立的I/O電源引腳VDDIO,支持1.2V~3.3V接口電壓。
3)每個芯片內(nèi)置唯一的以太網(wǎng)MAC地址,無需另外購買或分配,無需外部EEPROM。
4)集成基于DSP算法實現(xiàn)的低功耗10/100M收發(fā)器Transceiver。
5)支持Auto-MDIX交換TX/RX,自動識別正負信號線。
6)支持10BASE-T和100BASE-TX及自動協(xié)商。
7)支持UTP CAT5、CAT6雙絞線,支持120米傳輸距離。
8)支持用于遠程喚醒的樣本幀、鏈路狀態(tài)變化和魔法包事件。
9)支持IEEE 802.3x的流量控制。
10)支持IPv4 TCP/UDP和IPv6 TCP/UDP校驗和的生成和檢查。
這個特性非常有用,可以降低主控運行協(xié)議棧時的校驗計算時間,極大地提高效率。我們之前有測試過協(xié)議棧跑起來很大一部分主控的消耗就是計算校驗和。
11)內(nèi)置50Ω阻抗匹配電阻,內(nèi)置晶體振蕩器所需電容,外圍電路精簡。這降低了BOM成本,價格敏感產(chǎn)品選型時這就是很大的優(yōu)勢。
12)支持可選的外部EEPROM配置芯片。
13)支持QFN20(CH390D)/QFN28(CH390F)/QFN32X5(CH390H)/LQFP48(CH390L),QFN20封裝尺寸才3x3mm,特別適合空間受限應(yīng)用場景。
2.3、和其他型號對比
市面上也能搜到其他廠家的類似的芯片比如DAVICOM的DM9000和DM9051,和CH390的對應(yīng)如下。

CH390H引腳兼容DM9051,CH390L引腳兼容DM9000。可以看到CH390的特點、優(yōu)點還是很明顯的,CH390有更寬的VIO電壓域、更低的運行功耗,更小的封裝尺寸,更高的集成度(BOM要求簡單成本低),并提供MAC地址。
2.4、獲取資源
官網(wǎng)提供了相關(guān)的資料,可從如下地址下載:
資源包:包括CH390評估板說明,原理圖及參考例程等內(nèi)容。
https://www.wch.cn/downloads/CH390EVT_ZIP.html
數(shù)據(jù)手冊:
https://www.wch.cn/downloads/CH390DS1_PDF.html
三、評估板
評估板實物圖如下,我手里的是CH390D,就以該評估板配合自己的主控開發(fā)板來進行相關(guān)功能的測試。

原理圖如下:
可以看到外圍器件超級簡單,CH390D外圍只需要5個電容加一個25MHz晶體,降低了BOM成本,同時PCB布局布線也很簡單,占用空間也小。
網(wǎng)絡(luò)變壓器這邊只需要兩個電阻和兩個電容。


四、測試
4.1、MAC測試
這里使用STM32F103ZET6的開發(fā)板測試,使用Demo:EVTEXAMNET_MACNET_MAC.uvprojx。
我這里用的是MDKV5.43默認ARMCC編譯器版本是版本6,需要配置為對應(yīng)版本。


切換到編譯器版本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,如果支持并口可配置對應(yīng)的接口,
#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
對應(yīng)使用的引腳如下
#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
默認調(diào)試串口為USART1 PA9/PA10
#ifndef DEBUG #define DEBUG DEBUG_UART1 #endif
接線如下

運行后打印如下,打印狀態(tài)以及收到的數(shù)據(jù)包,說明收發(fā)正常。

4.1.1、發(fā)送測試
使用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中可以修改一次發(fā)送大小
#defineTEST_DATA_LEN 1500
main函數(shù)中連續(xù)發(fā)送
/**
* @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時鐘, 網(wǎng)上看到用CH390單發(fā)速度有68.6Mbps,可能的優(yōu)化方向是,提高SPI時鐘頻率到最大72MHz,優(yōu)化SPI發(fā)送接口比如使用DMA等。 也可以使用8/16位并口的型號,使用fsmc提高效率。
4.2、喚醒測試
使用Demo:EVTEXAMWakeOnLanWakeOnLan.uvprojx
關(guān)鍵代碼如下
配置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進入等待喚醒狀態(tài),MCU進入WFI狀態(tài),如果喚醒則產(chǎn)生WOL中斷,觸發(fā)MCU喚醒繼續(xù)執(zhí)行。
// Sleep every 5 packets received
if(receive_count >= 5)
{
receive_count = 0;
ch390_wake_notify();
printf("Sleeprn");
__WFI();
printf("Wake on LAN!rn");
}
運行打印如下

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;
開發(fā)板IP配置IP4_ADDR(&ipaddr, 192, 168, 1, 120);
所以電腦配置為同網(wǎng)段192, 168, 1, 119
main.c中可以配置是否使能DHCP,這里不使能
#defineUSE_DHCP 0
4.3.1、UDP測試
main.c中測試udp收發(fā)
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);
}
上位機中使用網(wǎng)絡(luò)調(diào)試助手收發(fā)測試,開發(fā)板收到數(shù)據(jù)原樣返回,測試功能正常。

4.3.2、TCP服務(wù)端測試
//udpecho_init(); //tcp_client_init(); tcp_server_init();
開發(fā)板收到數(shù)據(jù)原樣返回,使用上位機調(diào)試助手,測試收發(fā)如下,功能測試正常。

4.3.3、TCP客戶端測試
//udpecho_init(); tcp_client_init(); //tcp_server_init();
如下函數(shù)中修改服務(wù)端地址和端口
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);
}
開發(fā)板收到數(shù)據(jù)原樣返回,使用上位機調(diào)試助手,測試收發(fā)如下,功能測試正常。

五、總結(jié)
從上可以看出CH390集成MAC+PHY,適用于無MAC的MCU和FPGA等主控快速實現(xiàn)以太網(wǎng)連接。CH390有較寬的VIO電壓域、較低的功耗、小的封裝尺寸、高的集成度(BOM要求簡單成本低)、提供MAC地址等明顯的優(yōu)點,是相應(yīng)需求時非常不錯的選擇。有了該芯片,媽媽再也不用擔(dān)心我無MAC的MCU和無MAC IP的FPGA聯(lián)網(wǎng)了。
官方提供了STM32F103的例程,可以直接基于此實現(xiàn)以太網(wǎng)RAW、UDP、TCP數(shù)據(jù)收發(fā)的應(yīng)用,其他平臺移植也很簡單,只需要實現(xiàn)簡單的接口替換即可。
審核編輯 黃宇
-
以太網(wǎng)
+關(guān)注
關(guān)注
41文章
6066瀏覽量
181158 -
Mac
+關(guān)注
關(guān)注
0文章
1129瀏覽量
55422 -
PHY
+關(guān)注
關(guān)注
2文章
337瀏覽量
54193
發(fā)布評論請先 登錄
基于Xilinx FPGA的千兆以太網(wǎng)控制器的開發(fā)
一文詳解以太網(wǎng)MAC芯片與PHY芯片
STM32F429NI是否具備以太網(wǎng)MAC+PHY,無需外接PHY芯片?
PHY芯片 /MAC+PHY芯片選型
連接的以太網(wǎng)、USB 和 LCD 參考設(shè)計TIDM-CONNECTED-ETHERNET
以太網(wǎng)MAC芯片與PHY芯片的關(guān)系是什么
以太網(wǎng)芯片MAC和PHY的關(guān)系 精選資料分享
以太網(wǎng)芯片MAC和PHY有何關(guān)系
RK3288搭配以太網(wǎng)PHY芯片需要注意哪些
德州儀器推出業(yè)界首個支持以太網(wǎng)MAC+PHY的Tiva C系列MCU
車載以太網(wǎng)MAC和PHY的問題詳解
以太網(wǎng)——PHY、MAC、MII與網(wǎng)卡
車載以太網(wǎng)基本原理 常見以太網(wǎng)線束分類
常見以太網(wǎng)PHY-MAC接口的模式有哪些?
MCU/FPGA沒有以太網(wǎng)?CH390系列MAC+PHY二合一芯片輕松來搞定
評論