点击蓝字 关注我们
NCN26010 10Base-T1S器件符合IEEE 802.3cg规范以及OPEN联盟技术委员会6(Open Alliance,TC6)的SPI(串行外设接口)协议,并具有各种可选附加功能。
为了正确可靠地运行,在配置NCN26010时有一些注意事项,特别是因为该器件在没有正确配置的情况下无法参与多点数据段(multi−drop segment)通信。此外,如果配置不当,还有可能长期干扰整个数据段。本应用笔记旨在为用户提供针对其特定应用的 NCN26010 配置指南。这里仅描述了所需的基本设置,并通过配置示例对这些设置进行了讨论。本文为第一部分,将介绍工作模式、应用信息等。
NCN26010 提供 IEEE 802.3cg 标准规定的强制和可选工作模式,并提供扩展功能:
➤CSMA/CD 作为基本工作和后备协议
➤物理层冲突避免机制 (PLCA)
突发模式
优先级模式
➤增强噪声抗扰度 (ENI)
作为一款MAC-PHY(物理层-数据链路层)器件,NCN26010在一个单一芯片中集成了10Base-T1S物理层器件(Physical Layer Device)和符合IEEE802.3第4款的媒体访问控制器(Media Access Controller)。这种组合为低成本 MCU 提供了以太网通信功能,具备至少运行在15MHz且可软件实现TCP/IP协议栈(例如,FreeRTOS+)的SPI接口。
我们将重点介绍OPEN联盟 MACPHY SPI 协议的基本功能。有关详细信息,建议用户查阅的OPEN联盟 TC6 文档1.0 版。
为了说明该部分的基本用途,本应用笔记首先讨论了如何读写配置寄存器,以及如何通过 SPI 接口发送实际以太网帧数据。
接下来将介绍一组基本配置以及 MAC 内部地址过滤器(Address Filter)和过滤器掩码(Filter Mask)的使用。
图 1. 简化框图
👉SPI 接口
NCN26010 实现了 OPEN联盟 TC6 SPI 协议的所有必备功能。该协议使用 SPI 接口接收和发送以太网帧,并通过所谓的控制命令事务交换配置数据。
通过查看32位长通信报头(Header)的最高有效位(MSB),可以区分控制事务和数据事务。
控制命令报头
当第31位(DNC = 数据 – 非命令)被置为0时,表示这是一个控制命令。控制命令的格式如下:
图 2. 控制命令格式
数据报头
为了传输以太网数据(双向),上位机需要发送有效的数据传输报头,随后紧跟实际的以太网数据。数据传输报头的特征是第31位被置1。以下是与NCN26010器件使用相关的数据报头字段。
图 3. 数据报头字段
需要注意的是,在NCN26010的应用中,只使用 NORX、DV、SV、SWO、EV、EBO 和强制(奇数)校验 P 字段。所有其他位建议始终发送0。
👉读写配置和状态寄存器
要写入或读取单个寄存器,总共需要向 NCN26010 10Base-T1S MACPHY 发送 12 个字节。
控制命令以命令控制报头开头,随后是:
对于寄存器写入控制事务(寄存器写入),包含32位寄存器内容和32位占位数据(dummy data)
对于读取控制事务(寄存器读取),包含64位占位数据
SPI作为一种双向全双工通信方式,每传输/接收一位数据就需要一个SCK(串行时钟)跳变。为了在寄存器读写事务中接收适当数量的字节,MCU上位机需要通过MOSI线路向NCN26010器件发送占位字节(dummy bytes)。
连接的MCU必须能够在不断开MACPHY的SPI芯片选择的情况下完成整个事务。
为寄存器读写准备两个 12 字节长的数组似乎最为简单。在数组中填入正确的数据(报头和写入数据),然后通过 SPI 以 12 字节的批量传输方式发送,同时将结果接收到 12 字节的接收缓冲区中。
寄存器读取示例:
应用程序希望读取位于 MMS0 地址 0x0001 的 MACPHY 的 SPI 识别寄存器。
首先,我们需要生成一个适当的报头:按照此主题确定报头:
图4
确定报头后,在数组中填入零字节进行读取操作。
这将提供一个通过 MOSI 发送、通过 MISO 接收的字节数组,其内容如下:
图5
读取该寄存器的程序例程必须查看数据流的最后两个 32 位字。倒数第二个 32 位字(回显报头,字节 4 至 7)应等于通过 MOSI 线发送到 MACPHY 的命令报头,而最后一个 32 位字则包含寄存器的实际数据。请注意,寄存器读取总是返回32位字的寄存器内容,即使基础寄存器仅包含16位可用内容。
当由于使用无效的奇偶校验位计算方式导致报头格式错误,或SPI传输错误造成报头出现奇偶校验错误时,回显的控制报头及所有后续的32位字都将变为0x40000000,这表明存在“报头错误,HEADER BAD”状况。因此,MACPHY将忽略该命令。连接的上位机可以利用该信息来检测控制命令(Control Command)错误,并触发重新传输正确的控制命令。
寄存器写入示例:
假设您想要向NCN26010内部的MAC Control 0寄存器写入数据,以便在集成的MAC与PHY之间启用TX(发送)和RX(接收)传输,同时让MACPHY计算以太网帧的帧校验序列(FCS),以减轻 MCU 的计算负担。
请查阅NCN26010的数据手册以找到MAC CONTROL0寄存器。它位于 MMS 1(内存映射选择组 1)中,地址为 0x0000。
要启用TX和RX,并且让MAC计算并自动附加FCS(帧校验序列)到它将发送的每个以太网帧上,需要在寄存器中设置第 8 位(FCSA)、第 1 位(TXEN)和第 0 位(RXEN)。这将产生一个包含 0x00000103 值的待写入的数据字。
与上述寄存器读取示例类似,我们首先需要确定单个寄存器写入的正确控制命令报头。按照上述方案,我们可以得到:
图6
确定报头后,我们就可以在数组中填入要写入寄存器的数据。这样我们就得到了一个字节数组,通过MOSI发送,通过MISO接收,内容如下:
图7
请注意,奇偶校验的工作方式与寄存器读取示例相同。如果报头中的奇偶校验位出现错误,则随后的 32 位字将被设置为 0x40000000。在这种情况下,MACPHY 不会改变寄存器的内容。连接的 MCU 必须相应地处理这种情况,使用完整的报头重新发送寄存器写入事务。此外,重要的是要先发送 MSB 数据。
下面的代码片段提供了一个生成命令事务报头的函数实现示例:
图8
上述示例说明了如何生成有效的控制事务,以支持单个寄存器的读写操作。
有关如何在一次 SPI 传输中读取连续寄存器地址的详细信息,建议本应用笔记的读者查阅OPEN联盟 TC6 文档。
发送和接收以太网帧
OA-TC6 协议的设计不仅允许通过 SPI 接口实现器件配置,而且还能利用同一接口以半双工或全双工方式双向传输以太网帧,具体取决于上位机系统上运行软件的功能而定。但请注意,混合数据段上的实际以太网通信始终是半双工的。以太网帧以分块(Chuck)的形式进行双向传输。
数据块(Data Chunks)的概念
NCN26010 执行 OA SPI 协议,通过“数据块”(data chunks)与连接的上位机设备或系统传输以太网数据。
数据块是以太网帧的一部分,或者在较短的帧中,它可以是整个以太网帧。在发送数据时,数据块包含一个数据报头,其后是预定义数量的有效(pay load)数据。NCN26010可以配置每个数据块的pay load数据为8、16、32或64字节,默认设置为64字节。当上位机从NCN26010 MACPHY接收数据时,首先发送pay load数据,之后跟随一个32位的数据报尾,报尾向上位机指示:
发送的数据中是否包含有效的以太网帧数据。
在上一次传输中是否发现了错误。
NCN26010接收缓冲区中准备读取的数据块的可用数量。
当前可用于TX数据传输的空数据块的数量。
如果整个以太网帧的长度超过了单个数据块所能传输的数据量,则需要将其切割成适合数据块的片段。只要 NCN26010 设备内部的 4 k byte 发送和接收缓冲区有足够的空间,这一概念就支持在 NCN26010 和上位机设备之间中断以太网帧交换而不丢失数据。
以太网帧数据可能包含也可能不包含 4 字节 FCS(帧校验序列),具体取决于如何配置。当配置为计算并自动附加 FCS 时,由上位机设备向 NCN26010 发送数据时预计不会附加 FCS。同样,当启用NCN26010内部的FCS检查时,输入帧无需提供FCS,因为无效帧(FCS校验错误的帧)将不会存储在RX缓冲区(即被丢弃)。
NCN26010 可配置为存储转发(Store and Forward)模式或直通(Cut Though)工作模式。
在“存储转发”模式下,完整的数据帧会在被发送到单对绞线以太网数据段或从以太网媒介接收之前,全部存储在器件的缓冲区内。
直通模式对上位机上运行的软件的延迟和吞吐量性能有更严格的要求,因为上位机必须始终跟上以太网数据的输入和输出速度。在使用多任务操作系统时,长时间的中断服务例程或不适宜的任务切换会导致通信速度减慢,从而因TX缓冲区欠载(underruns)或RX缓冲区超限(overruns)而导致数据丢失。
本应用笔记将不涉及使用NCN26010的“直通”模式进行数据交换的内容,而是主要聚焦于“存储转发”模式的操作。
在 "存储转发 "模式下运行时,上位机需要时刻关注缓冲区的填充水平,尤其是 RX 端或下行(downstream)数据流。对于 TX 上行(upstream)数据流,上位机上运行的软件可以轻松地延缓数据发送,直到所需的足够数据块数量(即,与当前计划传输的以太网帧大小相匹配的数量)由于上位机无法直接控制RX(downstream)数据流,若设备以半双工方式交换数据,应优先处理RX数据流。
除其他配置选项外,数据块大小(chunk size)的选择会对将NCN26010连接到上位机MCU或系统的SPI接口施加最低速度要求。
在使用简单配置时,只允许新的以太网帧从数据块的开头开始,所需的SPI速度取决于以太网帧的长度以及数据块的大小:以下图表说明了这种关系。
图9
从这张图表中,这种方法的局限性变得显而易见。当应用主要使用短帧时,根据NCN26010的配置方式,较小的数据块大小可能会带来更高的吞吐量。在这种简单的配置中,极端情况是使用长度为65字节的帧和64字节大小的数据块。这将需要21 MHz的SPI速度。
NCN26010设计支持串行时钟(SCLK)上的SPI速度高达25 MHz。因此即使在这种情况下,MACPHY 的速度也足以传输所需的数据;然而,应用程序或驱动程序必须同时处理 RX 和 TX。随着以太网帧大小的增大,默认的 64 字节数据块大小需要降低 SPI 接口的时钟频率,以保证数据传输。
在多点(multi−drop)传输环境中,我们可以假设大部分数据流都在 RX 方向。由于 10Base-T1S 的半双工特性,即使以半双工方式处理 SPITX 和 RX 数据流,25 MHz SCLK 也能在大多数情况下提供稳定的数据流而不会丢失数据。
当 NCN26010 需要在单对以太网数据段上传输数据时,上位机需要发送一系列包含完整以太网帧数据的有效数据块。
新的以太网帧将从数据报头的 SV 标志(起始有效)置 1 开始。在简单情况下,帧只允许在CS(片选)信号被置位后的数据块起始处开始,起始字偏移量(Start Word Offset)将始终为0。如果以太网帧能够容纳在一个单独的数据块内,那么有效数据(payload)最后一个字节的EV(End Valid,结束有效)标志也需要被设置。请注意,当要传输的以太网帧数据短于以太网帧长度(包括源地址/目的地址、长度、字段/其他类型和 FCS)的最小要求 64 字节时,则NCN26010内的MAC会自动添加填充字节,以将帧扩展到其最小所需长度。当NCN26010被配置为不自动添加FCS时,填充字节以及FCS才需要由上位机提供。
与控制事务报头的计算类似,数据事务报头也可按下面的示例代码生成:
图10
发送以太网帧
在这里,我们仅描述了被称为 "TX 帧在数据块边界结束 "和 "每个 TX 帧都匹配数据块 "的 TX 帧发送情况。详见 [2]"图 8:发送数据块案例"。
我们需要区分以三种不同方式处理的帧数据情况:
1.帧完全匹配一个数据块
2.以太网帧匹配两个数据块
3.以太网帧需要两个以上的数据块
在第一种情况下,用户需要发送一个数据报头,紧随其后的是实际的帧数据。该数据报头需要设置以下这些位:
. SV = 1
. DV = 1
. EV = 1
EBO(End Byte Offset,结束字节偏移)指向有效数据的最后一个字节。需要注意的是,即使以太网数据没有占满整个数据块(例如,ARP广播帧长度为46字节,所以默认的64字节数据块并不会被完全利用),应用程序仍然需要始终发送全长数据块。
在使用64字节数据块且需要发送一个长度为46字节的ARP广播帧的情况下,EBO将指向第45个字节,因为在数据块中的第一个字节索引为0。
在第二种情况下,需要两个数据块来容纳payload数据,那么第一个数据报头需要设置:
. SV = 1
. DV = 1
. EV = 0
. EBO = 0
. SWO = 0
而帧中的第二个也是最后一个数据报头需要设置:
. SV = 0
. DV = 1
. EV = 1
. EBO = position of last valid pay load byte (最后一个有效payload字节的位置 )
. SWO = 0
如果向 NCN26010 MACPHY 传输payload数据时需要两个以上的数据块,则第一个报头与前一种情况相似:
. SV = 1
. DV = 1
. EV = 0
. EBO = 0
. SWO = 0
在第一个数据块之后和最后一个数据块之前的所有报头都需要:
. SV = 0
. DV = 1
. EV = 0
. EBO = 0
. SWO = 0
Or 0xA0200000.
最后一个报头需要设置:
. SV = 0
. DV = 1
. EV = 1
. EBO = position of last valid pay load byte (最后一个有效payload字节的位置 )
. SWO = 0
由于在数据传输前要先传输报头,因此向 MACPHY 发送数据块的应用程序总是要比数据块的payload数据多发送 4 个字节。
由此,8 字节的数据块需要 12 字节,16 字节的数据块需要 20 字节,32 字节的数据块需要 36 字节,64 字节的数据块需要 68 字节。
请注意,即使数据块未全部使用,这些长度也是固定的。在 EV=1 数据块的 EBO 之后发送的数据为 "不关心 "数据,可以是任何随机数据。为方便使用,建议在数据块中填入全为 0 的字节。
与发送控制事务一样,数据事务也是双向同时进行的。通过 SPI 接口向 NCN26010 发送数据时,上位机将通过 NCN26010 的 MISO(主入从出,Master In Slave Out)引脚接收 MACPHY 返回的相同字节数。通常情况下,数据从一个足够大的缓冲区发送和接收,该缓冲区可容纳发送帧数据所需的所有数据块。输入的数据将进入第二个(即接收)缓冲区。
接收以太网数据
发送到 MACPHY 的数据在每个数据块之前带有 32 位报头信息,MACPHY 发送出的数据块在实际数据之后有一个 32 位报尾信息。
报尾包含了上位机用来引导进一步通信的信息,无论其是发送还是接收更多数据。报尾的各字段在文献[2]的第7.3.7节中有详细解释。NCN26010器件不提供OPEN联盟定义的可选时间戳功能,因此RTSA(位7)和RTSP(位6)字段将不使用,始终为0。
NCN26010 器件的数据报尾结构如下:
图11
这些字段可概括为以下功能:
以太网数据交换最简单但也最慢的方式是半双工方式。在发送帧时,如果在数据报头中设置了 NORX 标志,NCN26010 就会被指示在接收上位机发送的 TX 帧数据时,不向上位机发送以太网数据。
同样,当数据报头的 DV 标志设置为零时,上位机可在不提供 TX 数据的情况下接收帧数据。
在这种工作模式下,连接的上位机应该优先读取帧而非发送帧,或者以“公平共享”的方式交替进行发送和接收。建议是尽量快速地清空接收缓冲区。
未完待续,请持续关注我们。
⭐点个星标,茫茫人海也能一眼看到我⭐