江门网站推广技巧,wordpress主要插件,成都最新的防疫通告,wordpress rss静态化自我学习为主#xff0c;同时也为所需要的提供一份资料 官方地址 增强型ShockBurst#xff08;ESB#xff09;是一种支持双向数据包通信的基本协议#xff0c;包括数据包缓冲、数据包确认和丢失数据包的自动重传。ESB以低功耗提供无线通信#xff0c;并且实现的代码量小且…自我学习为主同时也为所需要的提供一份资料 官方地址 增强型ShockBurstESB是一种支持双向数据包通信的基本协议包括数据包缓冲、数据包确认和丢失数据包的自动重传。ESB以低功耗提供无线通信并且实现的代码量小且易于使用。 ESB协议嵌入了传统nRF24L系列的硬件中。增强型ShockBurst模块使nRF5系列设备能够使用ESB协议与nRF5或nRF24L系列设备通信。 ESB具有自动数据包事务处理功能可轻松实现可靠的双向数据链路。事务是两个收发机之间的分组交换其中一个收发机充当主接收机PRX另一个收发机作为主发射机PTX。 特点
支持星形网络拓扑通常具有一个主接收机PRX和最多8个主发射机PTX传统模式下的1到32字节动态有效负载长度nRF5系列设备之间的1至252字节静态有效负载长度每个PTX和PRX之间的双向数据传输数据包确认和自动数据包重传功能每个管道拥有单独TX和RX FIFO向后兼容传统nRF24Lxx增强型ShockBurst支持外部前端模块
资源 ESB要求独占访问增强型ShockBurst库的所有固定和配置资源以确保正确操作 注意没有MPU强制执行这种独占访问因此操纵这些资源会产生未定义的行为。 无线电和定时器中断处理程序以优先级0最高级别运行ESB回调函数以优先级1运行。应用程序使用的其他中断必须使用优先级级别2或更低级别2到7以确保正确操作。 ESB需要MPSL库来支持前端模块。该库始终链接到构建中但是默认情况下它不会被初始化以便为应用程序和ESB协议提供对所有硬件资源的访问。有关详细信息请参阅Direct support。 向后兼容性 增强型ShockBurst库与传统的nRFgo SDK兼容。要确保使用nRFConnect SDK构建的应用程序可以与运行使用nRFgo SDK构建的程序的nRF24设备通信请使用配置ESB_LEGACY_CONFIG。 但是请注意两个SDK中提供的示例并不对应因此您不能将一个SDK中的发送器示例与另一个SDK的接收器示例一起使用
数据包事务 增强型ShockBurst包事务由来自PTX的包传输发起并在PTX从PRX接收到确认包ACK包时成功完成。 为了启用双向数据链路允许PRX将数据有效载荷附加到ACK分组。为此PRX向其TX FIFO添加一个分组该分组作为下一个ACK分组中的有效载荷发送。 如果PTX在初始发送的分组之后没有接收到ACK则它尝试重新发送分组直到最终接收到ACK。允许的最大重传尝试次数和每次尝试之间的延迟由最近一次调用esb_init其中esb_config结构中esb_config.retransmission_count和esb_config_retransmission_delay的值分别指定重传尝试的次数和它们之间的延迟或函数esb_set_rest_count和esb_set_rest_delay。重传延迟被定义为每次传输尝试开始之间的持续时间。注意这与传统的nRF24L系列硬件实现不同后者将延迟定义为从数据包传输结束到重传开始的持续时间。 如果从PRX发送到PTX的ACK分组丢失但初始分组和随后的重传尝试都被PRX成功接收则重复的分组将被PRX丢弃。这防止了PRX应用程序接收重复的数据包。然而重复的数据包将始终被PRX确认即使它们被丢弃。 PTX可以选择发送到PRX的各个分组不需要从PRX返回ACK。当应用程序使用传递给esb_write_bayload函数的esb_paiload参数的esb_pyload.noack字段将数据包上载到TX FIFO时会做出此决定。 当PRX接收到不需要ACK的分组时它不向PTX发送ACK分组因此PTX将继续重传该分组直到达到允许的最大重传尝试次数。
设置ESB应用程序 执行以下步骤设置应用程序以发送和接收数据包 使用ESB_init初始化ESB。您可以使用ESB_default_CONFIG中的默认参数作为p_CONFIG参数的起点并在需要时重新配置它们。 如有必要请使用以下任一函数更新地址、地址前缀、信道和比特率 esb_set_base_address_0() esb_set_base_address_1() esb_set_prefixes() esb_set_rf_channel() esb_set_bitrate() 确保高频时钟正在运行
NRF_CLOCK-EVENTS_HFCLKSTARTED 0;
NRF_CLOCK-TASKS_HFCLKSTART 1;
while (NRF_CLOCK-EVENTS_HFCLKSTARTED 0);开始发送或接收数据包 -如果节点是PTX 通过调用esb_write_bayload将数据包添加到TX FIFO。 根据最近一次调用esb_init时使用的esb_config.tx_mode的值您可能需要 调用esb_start_tx来启动传输。 无线电收到确认或超时后处理ESB_EVENT_TX_SUCCESS、ESB_EVENT_TX_FAILED和ESB_EVERT_RX_RECEIVE事件。 如果节点是PRX 当数据包传入时处理ESB_EVENT_RX_RECEIVED事件。每个事件之间可能有多个数据包到达RX FIFO。 为了将有效载荷附加到确认数据包即ACK包请使用esb_write_bayload将它们先添加到TX FIFO。在接收数据包之前必须对payload进行排队。当在队的payload被发送并收到确认后此时就假设它已经到达了另一个设备。因此ESB_EVENT_TX_SUCCESS事件被触发进入事件等待队列。 要停止ESB模块请调用ESB_disable。但是请注意如果在禁用模块时事务正在进行则事务不会完成。因此在禁用模块之前您可能需要检查模块是否空闲。
频率选择 ESB可以使用nRF5芯片可以使用的任何通道发送或接收数据包。通过调用esb_set_rf_channel函数来选择通道。 注意PTX和PRX必须配置为使用相同的频率来交换数据包。
管道和寻址 节点上的每个逻辑地址都称为管道。每个管道映射到发送或接收数据包时使用的一个广播地址。 广播地址由前缀地址和基地址组成基地址为2-4字节前缀地址为1字节。注意nRF5无线电使用0和1的交替序列作为分组的前导码。因此为了正确接收数据包基址的最高有效字节不能是0和1的交替序列也就是说它不能是0x55或0xAA。 管道0具有自己的唯一基址基址0而管道1-7使用相同的基址基址1。8个管道中的每一个都有一个唯一的一字节长的前缀地址。 广播时首先传输每个地址字节的最高有效位。2-4字节长的基地址的最高有效字节是第一个发送的地址字节而前缀字节是最后一个发送的。 地址不能由0x00前缀和格式为0x00XXXXXX长度4/0x0000XXXX长度5的地址组成。这样的零地址将导致返回错误代码NRF_error_INVALID_PARAM。 注意ESB和nRF5无线电外围设备中的字节顺序不同因为地址字节在ESB中被重新排列以匹配nRF24L无线电。 数据包标识 从PTX发送到PRX的任何分组由分组报头中的两位分组ID字段PID以及分组的循环冗余校验CRC字段唯一标识。如果新分组具有相同的有效载荷则该分组ID用于区分新分组与前一分组。 在PRX重传的分组被丢弃并且不添加到RX FIFO。并且ESB_EVENT_RX_RECEIVED事件不会被调用。 除了PID之外还使用CRC来识别唯一的分组。这降低了当发生多次连续失败的分组传输尝试时分组被错误地识别为重传尝试并被PRX丢弃的可能性。此功能非常有用因为PID只有两位。
FIFOs 在每个节点上RX和TX都有一个FIFO队列。FIFO由所有管道共享esb_paiload.pipe表示数据包的管道。对于接收的数据包此字段指定数据包来自哪个管道。对于传输的数据包它指定数据包将通过哪个管道发送。 当多个数据包排队时它们以FIFO方式处理忽略管道。 PTX FIFO处理 当ESB在PTX模式下启用时上传到TX FIFO的任何数据包都将在下一次机会传输。 当从PRX成功接收到ACK时PTX假设payload已成功接收并添加到PRX的RX FIFO。成功传输的数据包j将从PTX的TX FIFO中删除以便可以传输FIFO中的下一个数据包。 如果PTX接收到的ACK包含了payload则将该payload添加到PTX的RX FIFO。 PRX FIFO处理 当ESB在PRX模式下启用时所有启用的管道地址都会同时监视传入的数据包。 如果接收到先前未添加到PRX的RX FIFO的新数据包且RX FIFO具有用于该数据包的可用空间则就将该数据包添加到RX FIFO并将ACK发送回PTX。如果PRX的TX FIFO包含任何数据包则TX FIFO中的下一个可用数据包将作为payload附加到ACK包。注意在接收到PTX的数据包之前此可用数据包必须已上载到TX FIFO。
事件处理 当无线电上出现事件时增强型ShockBurst模块会分析其原因并在必要时将事件排入应用程序队列。这些事件包括成功操作、失败操作或RX FIFO中有可用的新数据。 在第一次触发软件中断时事件会以标志的形式进行排队。因此实际发送到应用程序的每个事件之间可能存在多个无线电中断。单个ESB_EVENT_TX_SUCCESS或ESB_EVENT_TX_FAILED事件分别指示一个或多个成功或失败的操作。ESB_EVENT_RX_RECEIVED事件指示RX FIFO中至少有一个新数据包。事件处理程序应确保在适当时完全清空RX FIFO。
前端模块支架 ESB协议支持外部前端模块。有关详细信息请参阅使用RF前端模块。
勘误表解决方案和nRF52832芯片修订 nRF52832设备上的模块实现包括一组硬件错误的解决方案。这些错误需要几百字节的代码空间来确定运行时哪些解决方案适用于运行固件的设备。这是为了确保基于较新SDK的固件在较旧和较新版本芯片上都能正常工作。如果您知道您的固件只能在某些设备上运行则可以通过删除解决方法来节省数百字节的代码空间。如果您确定不需要支持修订版1芯片则可以删除格式IfNRF_FICR-INFO.VARIANT0x0000FF000x00004200中If语句中的所有代码块。如果您确定不需要支持修订版2芯片则可以删除格式IfNRF_FICR-INFO.VARIANT0x0000FF000x00004500中If语句中的所有代码块。