关于ch32v208的ETH一些问题 - RISC-V MCU技术社区 - 电子技术william hill官网 - 广受欢迎的专业电子william hill官网 - 威廉希尔官方网站
分享 收藏 返回

江强 关注 私信
[问答]

关于ch32v208的ETH一些问题

在使用eth不适用上层协议,例如tcp/udp这些的时候,初始化ETH_LibInit这个函数后就开始使用phy进行收发,发送使用ETH_TxPktChainMode,接收使用WCHNET_ETHIsr中断

void WCHNET_ETHIsr( void )
{
    uint8_t eth_irq_flag, estat_regval;

    eth_irq_flag = R8_ETH_EIR;
    if(eth_irq_flag&RB_ETH_EIR_RXIF)                                //Receive complete
    {
        R8_ETH_EIR = RB_ETH_EIR_RXIF;
        /* Check if the descriptor is owned by the ETHERNET DMA */
        if( DMARxDescToGet->Status & ETH_DMARxDesc_OWN )
        {
            estat_regval = R8_ETH_ESTAT;
            if(estat_regval & \
                    (RB_ETH_ESTAT_BUFER | RB_ETH_ESTAT_RXCRCER | RB_ETH_ESTAT_RXNIBBLE | RB_ETH_ESTAT_RXMORE))
            {
                return;
            }
            if( ((ETH_DMADESCTypeDef*)(DMARxDescToGet->Buffer2NextDescAddr))->Status& ETH_DMARxDesc_OWN )
            {
                DMARxDescToGet->Status &= ~ETH_DMARxDesc_OWN;
                DMARxDescToGet->Status &= ~ETH_DMARxDesc_ES;
                DMARxDescToGet->Status |= (ETH_DMARxDesc_FS|ETH_DMARxDesc_LS);
                DMARxDescToGet->Status &= ~ETH_DMARxDesc_FL;
                DMARxDescToGet->Status |= ((R16_ETH_ERXLN+4)<<ETH_DMARxDesc_FrameLengthShift);
                /* Update the ETHERNET DMA global Rx descriptor with next Rx descriptor */
                /* Selects the next DMA Rx descriptor list for next buffer to read */
                DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);
                R16_ETH_ERXST = DMARxDescToGet->Buffer1Addr;

接收的长度为R16_ETH_ERXLN
接收的数据为DMARxDescToGet->Buffer1Addr

gEtherCatPara.receiveLen =R16_ETH_ERXLN;
 memcpy((u8 *)gEtherCatPara.receiveBuffer, (u8 *)DMARxDescToGet->Buffer1Addr, gEtherCatPara.receiveLen);

这样获取接收的数据

通过网络抓包工具,发现发送出来的东西抓不到,也可能是未发出来,中断有提示发送成功。
在用其它设备的PHY进行接收,有数据但是数据与发送的不同。

请哪位大神分析下是什么原因。

已退回50积分

回帖(2)

江强

2023-4-27 16:27:46
本帖最后由 qiang4119 于 2023-4-27 22:07 编辑

1)发送的时候大小端问题
2)网络分析仪对10M适配是否有问题
3)连接其它设备对10M适配有问题
4)接收中断接收完成但是无法check
根据今天的调试总结了以上几点

江强

2023-4-28 14:52:39
已解决,在 DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);之前提取数据,不然会指向下一个地址。

更多回帖

×
发帖