RT1052 ENET ENET_GetRxFrameSize kStatus_ENET_RxFrameEmpty问题

自建极简Ethercat主站-第1章 底层驱动编写与数据组包 ​ 主要讲解关于Ethercat报文的内容与组包的过程 阅读详情

RT1052 ENET ENET_GetRxFrameSize kStatus_ENET_RxFrameEmpty问题

问题
编写RT1050的ENET的BSP时, 当接收中断响应时,去读取数据,使用 ENET_GetRxFrameSize 获取接收帧大小,但返回 kStatus_ENET_RxFrameEmpty

具体解决问题的步骤我就不描述,直接给出问题的原因,以及相关疑问

解决
问题原因就在 AT_NONCACHEABLE_SECTION_ALIGN 这个宏中使用了 NonCacheable NonCacheable.init 两个段,但我的链接文件中并没有配置这两个段,从而导致运行出现以上问题。但这个问题与症结点也让我产生了疑惑,这两者之间最深层次原因是什么呢?如果有哪位前辈知道,还请留言告知,非常感谢。也欢迎各位朋友留言讨论。谢谢。

在解决过程中产生了新的理解

  • BSP开发中最重要的一点就是硬件初始化,其中大部分遇到的问题都是硬件初始化不对导致的。
  • 关于硬件初始化,你在参考官方示例中,要严格参照其硬件初始化,在其上删除与修改时要慎重,要明白其中含义才可做删除修改。
  • 如果官方示例中,没有你需求的外设,那这个时候你也要注意,如果你有足够实力可以基于芯片参考手册可以驱动外设,那就不用过多担心。但对于我这种只能基于库开发,勉强看得懂部分寄存器操作的朋友,就得另找SOC,或者看看方案公司是否有相关示例。
  • 如果你编写的BSP出现了问题,那么你只需要那你的BSP与官方示例进行对比,要一行行代码去进行对比,一行行排除,最终你就会找到你的问题,并解决。

代码如下


ENET要用到全局变量与宏

#define ENET_RXBD_NUM (4)
#define ENET_TXBD_NUM (4)
#define ENET_RXBUFF_SIZE (ENET_FRAME_MAX_FRAMELEN)
#define ENET_TXBUFF_SIZE (ENET_FRAME_MAX_FRAMELEN)
#define APP_ENET_BUFF_ALIGNMENT ENET_BUFF_ALIGNMENT

AT_NONCACHEABLE_SECTION_ALIGN(enet_rx_bd_struct_t g_rxBuffDescrip[ENET_RXBD_NUM], ENET_BUFF_ALIGNMENT);
AT_NONCACHEABLE_SECTION_ALIGN(enet_tx_bd_struct_t g_txBuffDescrip[ENET_TXBD_NUM], ENET_BUFF_ALIGNMENT);
SDK_ALIGN(uint8_t g_rxDataBuff[ENET_RXBD_NUM][SDK_SIZEALIGN(ENET_RXBUFF_SIZE, APP_ENET_BUFF_ALIGNMENT)],
          APP_ENET_BUFF_ALIGNMENT);
SDK_ALIGN(uint8_t g_txDataBuff[ENET_TXBD_NUM][SDK_SIZEALIGN(ENET_TXBUFF_SIZE, APP_ENET_BUFF_ALIGNMENT)],
          APP_ENET_BUFF_ALIGNMENT);

ENET的初始化函数

rt_err_t bsp_enet_init(EthDevice* dev){
    printf("bsp_enet_init\r\n");
    enet_config_t config;
    /* prepare the buffer configuration. */
    enet_buffer_config_t buffConfig[] = {
        {
            ENET_RXBD_NUM,
            ENET_TXBD_NUM,
            SDK_SIZEALIGN(ENET_RXBUFF_SIZE, APP_ENET_BUFF_ALIGNMENT),
            SDK_SIZEALIGN(ENET_TXBUFF_SIZE, APP_ENET_BUFF_ALIGNMENT),
            &g_rxBuffDescrip[0],
            &g_txBuffDescrip[0],
            &g_rxDataBuff[0][0],
            &g_txDataBuff[0][0],
        }
    };

    /* Get default configuration. */
    ENET_GetDefaultConfig(&config);
    printf("bsp_enet_init ENET_GetDefaultConfig ok\r\n");
    
    /*
     * config.miiMode = kENET_RmiiMode;
     * config.miiSpeed = kENET_MiiSpeed100M;
     * config.miiDuplex = kENET_MiiFullDuplex;
     * config.rxMaxFrameLen = ENET_FRAME_MAX_FRAMELEN;
     */
    config.interrupt = kENET_TxFrameInterrupt | kENET_RxFrameInterrupt;
    config.miiSpeed = dev->speed;
    config.miiDuplex = dev->duplex;
    
    printf("clk: %d\r\n", CLOCK_GetFreq(kCLOCK_AhbClk));
    ENET_Init(dev->enet_base, &dev->enet_handle, &config, &buffConfig[0], &dev->dev_addr[0], CLOCK_GetFreq(kCLOCK_AhbClk));
    printf("bsp_enet_init ENET_Init ok\r\n");
    ENET_SetCallback(&dev->enet_handle, bsp_enet_callback, dev);
    printf("bsp_enet_init ENET_SetCallback ok\r\n");
    ENET_ActiveRead(dev->enet_base);
    printf("bsp_enet_init ENET_ActiveRead ok\r\n");
    ENET_EnableInterrupts(dev->enet_base, kENET_RxFrameInterrupt);
    bsp_nvic_set_irqn_priority(dev->irqn, Group4_PreemptPriority_0, Group4_SubPriority_0);
    EnableIRQ(dev->irqn);
    
    bsp_eth_device.flags = ETH_DEVICE_FLAGS_INIT;
    return RT_EOK;
}
在GD32F4xx上移植LWIP 今天继续总结LWIP的移植过程。 阅读详情

相关推荐

基于RT Thread的ETH应用(一)

基于RTT的ETH应用(一) 实现目的:通过ETH实现互联网访问 1.CubeMX配置相关参数 1.1配置时钟参数 1.2配置ETH 本文采用正点原子F4探索者,故相关配置引脚不能使用cubemx默认,根据原理图进行配置 1.3 Rt thread Studio设置 1.3.1进入board.h查看说明 /** if you want to use eth you can use the following instructions. * * STEP 1, define macro relate

LINKKEEE的博客 1987

RT1176移植内存溢出

在做项目时直接移植代码出现了内存溢出的情况

gu_di的博客 793

[学习笔记 ]IAR的链接配置.icf文件详解——RT1052芯片的链接文件

本文主要通过以下几个部分解释IAR中的链接配置icf文件: 1、参考解析IAR的ILink链接器icf配置文件介绍icf文件作用以及icf文件主要内容; 2、介绍icf常使用的命令 3、RT1052芯片存储空间分配以及IAR8.30.1的系统预定义的section和block 4、结合野火RT1052mini开发板的链接配置文件MIMXRT1052xxxxx_itcm_txt_ram.icf详细分...

Batianherr的博客 9781

GD32F450+LAN8720A,#FreeRTOS_Plus_TCP 网络协议栈移植教程

GD32F450+LAN8720A,移植FreeRTOS_TCP教程

weixin_45775305的博客 3709

RT1050 EVK开发板原理图

RT1050 EVK开发板原理图,RT1050 EVK开发板原理图,RT1050 EVK开发板原理图

眼动数据分析基础_AOI分析动态刺激物

如果您正在研究人们对如视频、动画等动态刺激物的视觉行为,动态AOI工具可为您提供类似静态AOI工具对于图片及其他静止刺激物分析的同样功能。创建和编辑动态AOI的过程和静态AOI相似。 关于动态AOI工具的使用,有几点非常重要: 多个看到相同线性动态刺激物的用户的眼动数据叠加是有价值的; 动态AOI不能用于非线性动态记录的分析; 动态AOI不能用于静态刺激物,如图片的分析; 动态AOI可以被开启、关闭、移动、调整大小及跟踪相关分析对象 首先,我们来定义两种不同的动态刺激物:线性动态刺激物(LDS),是指固

Kobe123brant的博客 3502

GD32F470之网络lwip+UDP配置+lan8720芯片

GD32F470之网络lwip+UDP配置+lan8720芯片

qq_34985000的博客 8995

Camera ITS测试

一、手机端设置: 将 CtsVerifier.apk 安装到设备上, 连接上linux主机。 二、主机端设置: 基础:CTS测试运行环境 然后,主机安装python2.7,及numpy/scipy/matplotlib/opencv 栈和 python 成像库。按照下面的命令依次安装: sudo apt­-get install python-­numpy sudo apt-­g...

wangubuntu的专栏 7784

i.MX - RT1052 SDCard操作(SDIO接口)

写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。 目录硬件接口及电路外设信号引脚时钟控制线路外设框图架构数据缓冲及 DMA技术驱动移植代码例程最后 硬件接口及电路 MIMXRT1050 EVKB评估板上有一个SD卡插槽(J20)。J20是用于 USDHC1接口的 Micro SD插槽。 SD 卡一般都支持 SDIO 和 SPI 这两种接口,Micro SD卡接口模式引脚定义如下: Micro S

夏沫的杂物间 3215

安装cartographer,跑官网数据集

今天开始写一个关于google cartographer系列文章。此类文章网上已经很多,本系列文章主要记录重点部分及容易踩坑地方。 cartographer是一个完整的激光SLAM开源项目,属于graph slam,包含了完整的前端里程计和后端地图优化,既能够同时定位建图,又能够基于先验地图进行独立全局定位。 值得 目录 一、推荐首选看官网资料,已经很详细了 二、安装 三、源码文件架构 四、跑数据集 1、建图 2、基于先验地图的全局定位 一、推荐首选看官网资料,已经很详细了 原生版:

qq_18276949的博客 6144

STM32F411CEU6实战:用W25Q64存储多张图片,在240x240 LCD上轮播显示(附源码)

本文详细介绍了如何使用STM32F411CEU6通过SPI接口管理W25Q64 Flash中的多张图片,并在240x240 LCD上实现平滑轮播显示。内容涵盖硬件配置、图片存储方案设计、轮播系统实现及性能优化技巧,特别针对SPI传输优化和多图存储管理提供了实用解决方案。附源码,适合嵌入式开发者参考。

weixin_32025789的博客 308

痞子衡嵌入式:利用i.MXRT1xxx系列内部DCP引擎计算Hash值时需特别处理L1 D-Cache

  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是利用i.MXRT1xxx系列内部DCP引擎计算Hash值时需特别处理L1 D-Cache。   关于i.MXRT1xxx系列内部通用数据协处理器DCP模块,痞子衡之前写过一篇文章 《SNVS Master Key仅在i.MXRT10xx Hab关闭时才能用于DCP加解密》 介绍了DCP基本功能和AES加解密使用注意事项,实际上...

痞子衡嵌入式 680

飞书日历同步Outlook翻车?我踩过的坑和最终用Google Calendar成功的完整配置记录

本文详细记录了从Outlook日历同步到飞书时遇到的常见问题及解决方案,特别是通过Google Calendar实现稳定同步的完整配置流程。文章揭示了Outlook同步方案易翻车的原因,并提供了Google Calendar的避坑指南、高级技巧和企业级部署建议,帮助用户高效实现日历同步。

weixin_33724046的博客 313

【STM32F407】第6章 RL-TCPnet V7.x底层驱动说明

最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=95243 第6章 RL-TCPnet底层驱动说明 本章节为大家讲解RL-TCPnet的底层驱动,主要是STM32自带MAC的驱动实现和PHY的驱动实现。 目录 第6章 RL-TCPnet底层驱动说明 6.1 初学者重要提示 6.2 MAC+PHY驱动实现方案 6.3 CMSIS-Driver简介和驱动工作流程 6.4 CMSIS-Driver的P...

Simon223的博客 1635

基于ROS下的安卓手机图像和IMU跑ORB-SLAM3

接之前文章继续,手上没有现成的单目+IMU硬件,但是安卓手机几乎人人都有。因此,本文讲下如何用手机跑ORB-SLAM3的Mono和Mono_Inertial。 1. 手机与PC通信 基于ROS下的信息发布和订阅,手机和PC在一个局域网下进行信息(image和IMU)传输。 手机APK参考了github上的2个开源Android_Camera-IMU和android_ros_sensors,基于ros_java生成安卓APP,下载安装任一个APP到安卓手机,界面分别是这样: 手机和PC连一个无

h_372101的博客 1万+

Office系列完全干净卸载工具合集(最全)

使用 Microsoft Fix it 卸载 Microsoft Office 套件 一、Windows 7、Windows Vista或Windows XP下卸载Office 1.MicrosoftEasyFix50416 工具用来卸载office 2003 MicrosoftEasyFix50416_Office2003.msi 2.MicrosoftEasyFix50154 工具用来卸载office 2007 MicrosoftEasyFix50154_Office2007.msi 3.Microso

业精于勤,荒于嬉 3万+

Device net

Dnet 通讯

qq_20612759的博客 283

chembl_webresource_client 包数据接口下载chembl数据库;ZINC数据库下载、simles获取

点击进去https://zinc.docking.org/subclasses/kinase/predictions/,然后下载sdf模式,这里可以转化simles格式,如果下载csv里面没有包含simles。参考:https://github.com/chembl/chembl_webresource_client/blob/master/demo_wrc.ipynb。参考:https://zinc.docking.org/这是网页搜索查看,16条数据。这个数据这下载特别慢。

weixin_42357472的博客 3051

加密算法的软硬件实现区别研究实例

先来给大家科普下DCP模块,DCP是Data Co-Processor的简称,从名字上看是个通用数据协处理器。在i.MXRT1060 Security Reference Manual中有一张系统整体安全架构简图,这个简图中标出了DCP模块的主要功能 :CRC-32算法、AES算法、Hash算法、类DMA数据搬移。看到DCP支持的功能,你就能明白其模块命名的由来了。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1016

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ARM基础(4):L1 Cache之I-Cache和D-cache详解

在上一篇文章中,我介绍了MPU,我们知道MPU允许按区域修改一级Cache的属性,这个Cache一般为L1 Cache,它位于CPU的内部,用来加快指令和数据的访问速度。同时,CPU在处理共享数据时需要确保CPU和主存之间的数据一致性。这篇文章就来详细介绍一下L1 Cache的概念和用法。

主要分享嵌入式软件、人工智能部分知识 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

RT1052 ENET ENET_SendFrame调用 未发送帧

RT1050 ENET ENET_SendFrame调用 未发送帧 问题描述 遇到的问题:再调试ICMP协议栈时, 另外一台嵌入式主机 ping 出现了掉包 time达到几千毫秒 以及 (DUP!) 实际问题:在RT1050 SOC中开发 ENET 的BSP包, 调用ENET_SendFrame并返回成功,然示波器检测发现,ENET发送脚每发送两帧数据却只发送一帧数据。 开发环境 RT-Threa...

IT探险者-returningprodigal 899

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

i.mx6ull 官方SDK学习与移植(4)

IMX6ULL LVGL 移植

xingzhecumt的博客 761

Imx8 M4调用网口

I.MX8 m4核跑enet

Mr_zyy的博客 1098

野火 RT1052 移植网卡功能(LAN8720A)

野火 RT1052 移植网卡功能(LAN8720A) 开发环境 RT-Thread: v4.0.2(master) SOC: i.MX RT1050 Board: 野火 RT1052 目的 在 RT-Thread 系统上进行网络通讯

IT探险者-returningprodigal 4588

GD32F450之以太网(Lwip2.1.2+FreeRTOS+UDP+TCP)

本文简要介绍GD32单片机关于以太网的应用,参照官方应用手册,基于Lwip2.1.2版本对UDP及TCP通信进行测试。使用PHY芯片为LAN8720,实时操作系统FreeRTOS。实现自适应10M/100M以太网通信。2、以太网初始化:使能以太网相关时钟,初始化MAC、DMA相关控制(使用官方默认库函数即可)4、Lwip协议栈初始化,主要配置IP、MAC等信息,创建数据收发任务。其中ethernetif_init函数需在ethernetif.c文件中修改。

m0_60881302的博客 2939
上一篇: RT1052 rtthread 报错"FPU active!" "UNALIGNED"
下一篇: RT1052 ENET ENET_SendFrame调用 未发送帧
returningprodigal
博客等级 码龄12年 53粉丝 122原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值