ESP32学习day3

上周四胃难受,上着上着班请假了。
周五在烧芯片,改参数。芯片发货了,然后在快下班的时候搞了一会儿esp32。
还是在看esp的参数配置


在example configuration 中需要改
internal EMAC:MAC控制器,物理层芯片简称为PHY。
MII,戒指独立接口,一般应用于MAC层和PHY层之间的以太网数据传输,也可叫数据接口。(MAC与PHY间的管理接口一般是MADIO)
RMII接口:
TXD[1:0]:数据发送信号线,数据位宽为2,是MII接口的一半;

RXD[1:0]:数据接收信号线,数据位宽为2,是MII接口的一半;

TX_EN(Transmit Enable):数据发送使能信号,与MII接口中的该信号线功能一样;

RX_ER(Receive Error):数据接收错误提示信号,与MII接口中的该信号线功能一样;

CLK_REF:是由外部时钟源提供的50MHz参考时钟,与MII接口不同,MII接口中的接收时钟和发送时钟是分开的,而且都是由PHY芯片提供给MAC芯片的。这里需要注意的是,由于数据接收时钟是由外部晶振提供而不是由载波信号提取的,所以在PHY层芯片内的数据接收部分需要设计一个FIFO,用来协调两个不同的时钟,在发送接收的数据时提供缓冲。PHY层芯片的发送部分则不需要FIFO,它直接将接收到的数据发送到MAC就可以了。

CRS_DV:此信号是由MII接口中的RX_DV和CRS两个信号合并而成。当介质不空闲时,CRS_DV和RE_CLK相异步的方式给出。当CRS比RX_DV早结束时(即载波消失而队列中还有数据要传输时),就会出现CRS_DV在半位元组的边界以25MHz/2.5MHz的频率在0、1之间的来回切换。因此,MAC能够从 CRS_DV中精确的恢复出RX_DV和CRS。

在100Mbps速率时,TX/RX每个时钟周期采样一个数据;在10Mbps速率时,TX/RX每隔10个周期采样一个数据,因而TX/RX数据需要在数据线上保留10个周期,相当于一个数据发送10次。
当PHY层芯片收到有效的载波信号后,CRS_DV信号变为有效,此时如果FIFO中还没有数据,则它会发送出全0的数据给MAC,然后当FIFO中填入有效的数据帧,数据帧的开头是“101010---”交叉的前导码,当数据中出现“01”的比特时,代表正式数据传输开始,MAC芯片检测到这一变化,从而开始接收数据。
当外部载波信号消失后,CRS_DV会变为无效,但如果FIFO中还有数据要发送时,CRS_DV在下一周期又会变为有效,然后再无效再有效,直到FIFO中数据发送完为止。在接收过程中如果出现无效的载波信号或者无效的数据编码,则RX_ER会变为有效,表示物理层芯片接收出错。

-----------------------------------------------------------------------------------------------分割线----------------------------------------------------------------------------
刚才头儿又给我更新了任务,卧槽,能不能让我有个学习的过程!!!!
现在我准备把官方代码再撸一遍,记录下不懂得地方,翻书!!!

---------------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------------------

我这个废物终于调出来了,能获取动态IP地址了。
感动。。。

我再来详细记录一下这个配置过程
仿照官方例程,

  1. 首先要有一个"TAG",这个TAG可以用来存放一起,事件名称,事件ID,事件地址等
  2. 然后是事件处理的handler,我的理解是 这个函数是处理以太网事件的执柄人。在这个函数内,传进来四个值,一个空类型的arg指针(具体指什么我还没理解到,等后面来填坑),然后就是事件基值(这个我也没理解到,后面来填坑)再然后就是事件ID号,最后是事件具体数据。我备注为:以太网事件的事件处理程序。
    2.1 这里主要是一堆swatch case,针对于event_id的
  3. 第二个静态函数,是处理IP的handler,主要是调用ESP_LOGI显示IP。我备注为获取IP事件后的处理程序
  4. esp入口函数,入口函数主要是初始化netif库,TCP/IP network interface。入口函数里调用了很多idf中的东西,我很多都不太明白,希望后面有时间把idf仔细屡一屡
    4.1 esp_event_loop_create_default(),调用,默认不修改,实话:这个函数名大概的意思我都不懂
    4.2 ESP_NETIF_DEFAULT_ETH(),调用,默认不修改
    4.3 esp_eth_set_default_handlers(),调用,默认不修改
    4.4 esp_event_handler_register(),调用,默认不修改。这个函数层层return,给我恶心坏了,但根据传值的名称还是能理解
    ......
  5. 可见,只要选择我想用的接口方式,把其他多余函数和statement删掉,采用官方的默认配置就可以使用了。
    什么他妈的叫菜逼——————hanoch·Thomas
posted @ 2021-10-25 11:38  肆月黄妙之  阅读(184)  评论(0编辑  收藏  举报