1.ecx_setupnic(ecx_portt *port, const char *ifname, int secondary):连接NIC到套接字的基本设置
2.ecx_closenic(ecx_portt *port):关闭套接字
3.ec_setupheader(void *p):用以太网报头结构填充缓冲区,目标MAC为始终广播,Ethertype为始终ETH_P_ECAT
4.ecx_ge
tindex(ecx_portt *port):获取新的帧标识符索引并分配相应的rx缓冲区
5.ecx_setbufstat(ecx_portt *port, int idx, int bufstat):设置接收缓冲区状态
6.ecx_outframe(ecx_portt *port, int idx, int stacknumber):通过套接字传输缓冲区(非阻塞)
7.ecx_outframe_red(ecx_portt *port, int idx):通过套接字传输缓冲区(非阻塞)
8.ecx_recvpkt(ecx_portt *port, int stacknumber):套接字的非阻塞读取。将帧放入临时缓冲区。
9.ecx_inframe(ecx_portt *port, int idx, int stacknumber):非阻塞接收帧功能。使用RX缓冲区和索引组合读取帧和传输帧。为了补偿接收到的无序帧,所有帧都存储在各自的索引缓冲区中。如果之前在缓冲区中放置了一个帧,函数将它从缓冲区索引中返回,而不调用ec_recvpkt。如果所请求的索引不在缓冲区中,则调用ec_recvpkt来获取它。现在有三种选择,
(1).未读取帧,退出。
(2).除被请求索引外的帧被读取,存储在缓冲区中并退出。
(3).读取索引匹配的帧,存储在缓冲区中,在缓冲区状态中设置完成标志,退出。
10.ecx_waitinframe_red(ecx_portt *port, int idx, osal_timert *timer):阻塞冗余接收帧功能。如果冗余模式不处于活动状态,则跳过辅助堆栈和冗余函数。在冗余模式下,它等待(主和辅助)帧进入。结果进入一个决策树,该决策树根据信息包的路由和它可能丢失的到达,决定如何重新路由原始信息包以在另一次尝试中获得数据。
11.ecx_waitinframe(ecx_portt *port, int idx, int timeout):阻塞接收帧功能。调用ec_waitinframe_red()。
12.ecx_srconfirm(ecx_portt *port, int idx, int timeout):阻塞发送和接收帧功能。用于非处理数据帧。数据报被构建成一个框架并通过这个功能进行传输。它等待答案并返回工作计数器。如果时间还剩,函数会重试,结果是WKC=0或没有收到帧。
13.
ec_setupnic(const char *ifname, int secondary)
ec_closenic(void)
ec_getindex(void)
ec_setbufstat(int idx, int bufstat)
ec_outframe(int idx, int stacknumber)
ec_outframe_red(int idx)
ec_inframe(int idx, int stacknumber)
ec_waitinframe(int idx, int timeout)
ec_srconfirm(int idx, int timeout)
等接口都是对上述接口的封装,将参数port消化掉,所以不讨论。
通过上述介绍我们知道了nicdrv里面都有哪些接口并且每个接口长什么样子是干嘛的我们都知道了,下面说下我们具体要做哪些修改;
1、2两个接口成对出现一个是连接以太网外设一个是关闭以太网外设,仅在程序构造和析构时执行,但是对于我们实际使用的I.MXRT硬件来说就是以太网外设和PHY芯片的初始化动作,我们可以放在这个函数里面做也可以放在代码初始化时执行
3不需要改动,为ETHERCAT固定帧头
4需要去掉端口的锁,第一我们并不支持这个锁接口,第二我们对于外设并不存在竞争关系所以不需要互斥锁
5不需要修改
6、7接口需修改数据发送实现,有两种实现方式,方式1为使用以太网裸机外设接口直接进行数据报的管理然后发送;方式2套用LWIP协议栈的数据报管理,通过调用LWIP的数据报收发接口进行数据发送(好处自己想)
8、9接口实现原理与上同