【XBEE手册】XBEE操作

news/2024/11/17 19:33:24/

【XBEE手册】XBEE操作

@(ZigBee)[ZigBee, XBEE手册]

[转载请注明出处,谢谢!]


  • 【XBEE手册】XBEE操作
    • 串口接口
    • UART数据流
      • 串行数据
    • SPI通信
      • SPI操作
      • 串口选择
    • 串口缓冲区
      • 串口接受缓冲区
      • 串口发送缓冲区
    • UART流控制
      • CTS¯¯¯¯¯¯¯¯¯¯¯CTS¯\overline{CTS}流控制
      • RTS¯¯¯¯¯¯¯¯¯¯¯RTS¯\overline{RTS}流控制
    • 中断控制
    • 串行接口协议
      • 透传操作(Transparent operation)
      • API操作
      • 透传和API操作比较
    • 模式
      • 空闲模式(Idle mode)
      • 传输模式(Transmit mode)
      • 接收模式
      • 命令模式
        • 进入命令模式
        • 故障排除
        • 发送AT命令
        • 响应AT命令
        • 应用命令更改
        • 使命令更改永久化
        • 退出命令模式
      • 睡眠模式


串口接口

XBee /的XBee-PRO Zigbee射频模块通过串行端口接口连接到主机设备。该设备可以与任何逻辑和电压兼容的UART通过电平转换器与任何串行设备(例如,通过RS-232或USB接口板)或通过SPI进行通信,如SPI通信中所述。

注意也可以使用双线串行接口(TWI),但Digi不支持。有关TWI的信息,请参阅EM357引脚映射。

UART数据流

具有UART接口的设备直接连接到XBee / XBee-PRO Zigbee RF模块的引脚,如下图所示。该图显示了UART接口环境中的系统数据流。在信号名称上划线代表低置有效。
enter image description here

串行数据

设备通过TH引脚4 / SMT引脚4 DIN将数据作为异步串行信号发送到XBee / XBee-PRO Zigbee RF模块的UART 。当设备不传输数据时,信号应该空闲。

要进行串行通信,必须为两个设备(微控制器和XBee / XBee-PRO Zigbee RF模块)的UART配置波特率,奇偶校验,起始位,停止位和数据位的兼容设置。

每个数据字节由起始位(低),8个数据位(最低有效位优先)和停止位(高)组成。下图说明了通过设备的数据的串行位模式。该图显示了通过设备发送的UART数据包0x1F(十进制数31)。
enter image description here

用户可以分别使用BD,NB和SB命令在设备上配置UART波特率,奇偶校验和停止位设置。有关更多信息,请参阅串行接口命令。

SPI通信

XBee /XBee-PRO Zigbee射频模块支持在从模式SPI通信。从机从主机接收时钟信号和数据,并将数据返回到主机。下表显示了SPI端口在设备上使用的信号。

信号功能
SPI_MOSI(主输出,从输入)输入主机来的串行数据
SPI_MISO(主输入,从输出)将串行数据输出到主机
SPI_SCLK(串行时钟)MOSI和MISO上的时钟数据传输
SPI_ SSEL¯¯¯¯¯¯¯¯¯¯¯¯¯¯ S S E L ¯ (从机选择)启用与从机的串行通信

前四个引脚是SPI的标准引脚。该设备还支持一个额外的引脚,该引脚可配置为在有数据发送时向SPI主机发出警报。该引脚称为SPI_ ATTN。如果主机监控此引脚(通过轮询或中断),它可以知道何时需要从设备接收数据。SPI_ ATTN每当有数据要发送就会置有效,直到所有可用数据已经移出到SPI主机。

在这种模式下:
* 数据/时钟速率最高可达5 Mb / s。
* 数据是最重要的位(most significant bit, MSB)。
* 使用帧格式模式0。这意味着CPOL = 0(空闲时钟为低电平)和CPHA = 0(数据在时钟前沿采样)。
* SPI端口仅支持API模式(AP = 1)。

下图显示了SPI通信的帧格式模式0。
enter image description here

SPI操作

当主机置有效SPI_ SSEL¯¯¯¯¯¯¯¯¯¯¯¯¯¯ S S E L ¯ 时,设备驱动SPI发送数据到输出引脚(SPI_MISO),并从输入引脚SPI_MOSI接收SPI数据。必须置有效SPI_ SSEL¯¯¯¯¯¯¯¯¯¯¯¯¯¯ S S E L ¯ 引脚,以使发送串行器能够将数据驱动到输出信号SPI_MISO。SPI_ SSEL¯¯¯¯¯¯¯¯¯¯¯¯¯¯ S S E L ¯ 的上升沿复位SPI从移位寄存器。

如果存在SPI_SCLK,则无论是否驱动SPI_ SSEL¯¯¯¯¯¯¯¯¯¯¯¯¯¯ S S E L ¯ 线,SPI_MISO线始终被驱动。

如果输入缓冲区为空,SPI串行器将发送忙标志(0xFF)。否则,SPI端口上的所有数据交换都使用API​​操作。有关更多信息,请参阅API操作。

SPI从控制器必须保证有时间将新的发送数据从发送缓冲区移动到硬件串行器中。为了提供足够的时间,SPI从控制器在每个新的发送数据串的开头插入一个填充字节。只要发送缓冲区为空并且设备将数据放入发送缓冲区,SPI硬件就会在发送的前面插入一个填充字节,就好像这个字节是由软件放在那里一样。

串口选择

在默认配置中,UART和SPI端口均配置为串行端口操作。在这种情况下,串行数据从UART输出,直到主机设备置有效SPI_ SSEL¯¯¯¯¯¯¯¯¯¯¯¯¯¯ S S E L ¯ 信号。此后,所有串行通信仅在SPI接口上运行,直到发生复位。

如果仅启用UART,则XBee / XBee-PRO Zigbee RF模块仅使用UART,并忽略SPI_ SSEL¯¯¯¯¯¯¯¯¯¯¯¯¯¯ S S E L ¯

如果仅启用SPI,则XBee / XBee-PRO Zigbee RF模块仅使用SPI,并忽略UART通信。如果在引导期间保持DOUT为低电平,则XBee / XBee-PRO Zigbee RF模块仅使用SPI。

使用SPI后,请勿尝试应用更改(AC)来更改UART或SPI设置,而应使用以下方式更改:

  • 0x09帧以重新配置UART / SPI /其他设置。
  • WR保存设置。
  • FR用于重置XBee / XBee-PRO Zigbee RF模块并使用新的配置设置。

如果两个串行端口均未使能,则UART保持使能状态​​,设备仅使用UART,并忽略SPI_ SSEL¯¯¯¯¯¯¯¯¯¯¯¯¯¯ S S E L ¯

串口缓冲区

XBee /的XBee-PRO Zigbee射频模块维持内部缓冲区来收集串行和RF数据其接收。串行接收缓冲区收集传入的串行字符并保留它们,直到设备可以处理它们。串行发送缓冲区通过RF链路收集它接收的数据,直到它将数据发送出串口。下图显示了设备缓冲区收集接收的串行数据的过程。
enter image description here

串口接受缓冲区

当串行数据通过串行端口进入XBee / XBee-PRO Zigbee RF模块时,设备将数据存储在串行接收缓冲区中,直到可以处理为止。在某些条件下,当串行接收缓冲区已满时,设备可能会接收数据,在这种情况下,设备会丢弃数据。

当数据流入串行端口比通过空中(over the air,OTA)处理和发送要快时,串行接收缓冲区将会变满。虽然在串行端口上接收数据的速度可以比在短时间内传输数据的速度快得多,但是在该模式下的持续操作会导致设备由于耗尽数据存储空间而丢弃数据。地址发现、路由发现和重传可能延迟空中传输。处理接收的RF数据还可以带走用于处理输入串行数据的时间和资源。

如果UART是串行端口并且启用了 CTS¯¯¯¯¯¯¯¯¯¯¯ C T S ¯ 流控制,则当接收缓冲区几乎已满时,设备会向外部数据源发出警报。主机延迟向设备发送数据,直到模块再次置有效 CTS¯¯¯¯¯¯¯¯¯¯¯ C T S ¯ ,允许更多数据进入。

如果SPI是串行端口,则没有可用的硬件流控制。用户有责任确保接收缓冲区不会溢出。一种可靠的策略是在每个帧发送后等待TX_STATUS响应,以确保设备有时间处理它。

串口发送缓冲区

当设备接收RF数据时,它将数据移入串行发送缓冲区并将其发送出UART 或SPI端口。如果串行发送缓冲区已满并且系统缓冲区也已满,则它会丢弃整个RF数据包。每当设备接收数据的速度超过处理数据并将数据传输出串口的速度时,就有可能丢失数据。

以下为在串行发送缓冲区可能变满导致RF数据包丢失的情况:

  1. 如果将RF数据的速率设置为高于设备的接口数据速率,则设备接收数据比将数据发送到主机要快。即使来自大量设备的偶然传输也会快速累积并溢出传输缓冲区。
  2. 如果主机由于被硬件流控制保持关闭而不允许设备从串行发送缓冲区发送数据。

UART流控制

用户可以使用 RTS¯¯¯¯¯¯¯¯¯¯¯ R T S ¯ CTS¯¯¯¯¯¯¯¯¯¯¯ C T S ¯ 引脚提供 RTS¯¯¯¯¯¯¯¯¯¯¯ R T S ¯ CTS¯¯¯¯¯¯¯¯¯¯¯ C T S ¯ 流控制。 CTS¯¯¯¯¯¯¯¯¯¯¯ C T S ¯ 流控制向主机提供停止向设备发送串行数据的指示。 RTS¯¯¯¯¯¯¯¯¯¯¯ R T S ¯ 流控制允许主机发信号通知设备不将串行发送缓冲区中的数据发送出UART。要启用 RTS¯¯¯¯¯¯¯¯¯¯¯ R T S ¯ / CTS¯¯¯¯¯¯¯¯¯¯¯ C T S ¯ 流控制,请使用D6和D7命令。

注意使用SPI端口时无法进行串行端口流控制。

CTS¯¯¯¯¯¯¯¯¯¯¯ C T S ¯ 流控制

如果启用 CTS¯¯¯¯¯¯¯¯¯¯¯ C T S ¯ 流控制(D7命令),当串行接收缓冲区距离已满17个字节时,设备会置无效 CTS¯¯¯¯¯¯¯¯¯¯¯ C T S ¯ (将其设置为高电平)以向主机发出信号以停止发送串行数据。 串行接收缓冲区有34个字节的空间后,设备重新置有效 CTS¯¯¯¯¯¯¯¯¯¯¯ C T S ¯

在任何一种情况下,在串行接收缓冲区使用FT -17或更少字节之前,不会重新置有效 CTS¯¯¯¯¯¯¯¯¯¯¯ C T S ¯

RTS¯¯¯¯¯¯¯¯¯¯¯ R T S ¯ 流控制

如果发送D6命令以启用 RTS¯¯¯¯¯¯¯¯¯¯¯ R T S ¯ 流控制,只要 RTS¯¯¯¯¯¯¯¯¯¯¯ R T S ¯ 被置无效(设置为高电平),设备就不会将串行发送缓冲区中的数据从DOUT引脚发送出去。不要长时间置无效 RTS¯¯¯¯¯¯¯¯¯¯¯ R T S ¯ ,否则串行发送缓冲区将填满。如果设备接收到RF数据包并且串行发送缓冲区没有足够的空间容纳所有数据字节,则它会丢弃整个RF数据包。

如果在设备将数据输出到UART时 RTS¯¯¯¯¯¯¯¯¯¯¯ R T S ¯ 被置无效(设置为高),设备在 RTS¯¯¯¯¯¯¯¯¯¯¯ R T S ¯ 被置无效后,可以发送最多五个字符到UART端口。

中断控制

如果串行中断(DIN保持低电平)信号发送超过五秒钟,设备将复位,并使用默认波特率设置(9600波特)启动进入命令模式。如果未启用P3或P4,则禁用此中断功能

串行接口协议

XBee /XBee-PRO Zigbee射频模块支持透传(Transparent)和应用程序编程接口(Application Programming Interface,API)的串行接口。

透传操作(Transparent operation)

在透传模式下操作时,设备可用作串行线路替换。设备将所有通过DIN 或MOSI用于RF传输的引脚收到的UART或SPI数据排序。收到RF数据后,设备通过串口发送数据。使用命令模式界面配置设备配置参数。

注意使用SPI时,透传操作不可用。

设备在串行接收缓冲区中缓冲数据,并在收到以下内容时对数据进行打包和传输:

  • RO(Packetization Timeout)参数确定的时间量没有串行字符。如果RO = 0,则在设备收到字符时开始打包。
  • 命令模式序列(GT + CC + GT)。在设备发送序列之前,缓冲在串行接收缓冲区中的任何字符。
  • 适合RF数据包的最大字符数。

API操作

API操作模式是透传操作模式的替代方案。基于帧的API扩展了主机应用程序与设备的网络功能交互的级别。在API模式下,设备包含在帧中进入和离开的所有数据,这些帧定义设备中的操作或事件。

API提供了在主机应用程序层配置设备和路由数据的替代方法。主机应用程序可以向设备发送包含地址和有效负载信息的数据帧,而不是使用命令模式来修改地址。设备将数据帧发送到应用程序,这些帧包含状态数据包以及来自接收数据包的源和有效负载信息。

API操作选项有助于许多操作,例如:

  • 无需进入命令模式即可将数据传输到多个目的地
  • 接收每个发送的RF包的成功/失败状态
  • 确定每个收到的数据包的源地址

透传和API操作比较

下表比较了Tr​​ansparent和API操作模式的优点:

透传操作
简单的界面除非处于命令模式,否则设备会发送所有收到的串行数据。
易于支持应用程序更容易支持透传操作和命令模式。
API操作
易于管理,数据传输到多个目的地将RF数据传输到多个远程设备只需要更改API帧中的地址。此过程比透传操作快得多(透传操作:应用程序必须进入命令模式,更改地址,退出命令模式,然后传输数据)。每个API传输可以返回指示失败成功或原因的传输状态帧。
收到的数据帧包含发件人的地址所有收到的RF数据API帧都指示源地址。
高级Zigbee寻址支持API发送和接收帧可以公开Zigbee寻址字段,包括源和目标端点,群集ID和配置文件ID。这样可以轻松支持ZDO命令和公共配置文件的通行。
高级网络诊断API帧可以提供来自远程设备的I / O样本和节点标识消息的指示。
远程配置可以使用API​​将设置和读取配置命令发送到远程设备以根据需要进行配置。

通常,设备以下情况建议使用API​​模式:

  • 将RF数据发送到多个目的地。
  • 发送远程配置命令以管理网络中的设备。
  • 从多个设备接收RF数据包,应用程序需要知道哪个设备发送了哪个数据包。
  • 必须支持多个Zigbee端点,群集ID和/或配置文件ID。
  • 使用Zigbee设备配置文件服务。

在以下情况下需要API模式:

  • 使用Smart Energy固件。
  • 使用SPI作为串行端口。
  • 从远程设备接收I / O样本。
  • 使用源路由。

如果上述条件不适用(例如传感器节点,路由器或简单应用程序),则透传操作模式可能是合适的。在网络中使用运行API模式和透传模式的设备混合是可以接受的。

模式

XBee /XBee-PRO Zigbee射频模块处于接收模式时,它不发送数据。在以下条件下,设备转换为其他操作模式:

  • 发送模式(串行接收缓冲区中的串行数据已准备好打包)
  • 睡眠模式
  • 命令模式(发出命令模式序列)

空闲模式(Idle mode)

未接收或传输数据时,设备处于空闲模式。 在空闲模式期间,设备会在RF端口和串行端口上侦听有效数据。

在以下条件下,设备转换为其他操作模式:

  • 发送模式(串行接收缓冲区中的串行数据已准备好打包)。
  • 接收模式(通过天线接收的有效RF数据)。
  • 命令模式(发出命令模式序列,不适用于Smart Energy软件或使用SPI端口).

传输模式(Transmit mode)

在传输数据之前,模块确保已建立目标16位网络地址和到目标节点的路由。

如果用户不知道已知的目标16位网络地址,则会启动网络地址发现。如果用户不知道路由未知,则会启动路由发现,以便建立到目标节点的路由。如果未发现具有匹配网络地址的设备,则会丢弃该数据包。一旦建立路由,设备就发送数据。如果路由发现无法建立路由,则设备会丢弃该数据包。下图显示了发送模式序列。
enter image description here
当Zigbee数据从一个节点传输到另一个节点时,目标节点通过建立的路由将网络级确认发送回源节点。该确认分组向源节点指示目的节点接收到数据包。如果源节点未收到网络确认,则重新传输数据。

在极少数情况下,目标可能会接收数据包,但源可能无法接收网络确认。在这种情况下,源重新传输数据,这可能导致目标多次接收相同的数据包。XBee模块不会过滤掉重复的数据包。我们建议该应用程序包含解决此问题的规定。

有关更多信息,请参阅传输,寻址和路由。

接收模式

这是XBee / XBee-PRO Zigbee RF模块的默认模式。当设备不传输数据时,设备处于接收模式。如果目标节点收到有效的RF数据包,则目标节点将数据传输到其串行传输缓冲区。

命令模式

命令模式是固件将传入字符解释为命令的状态。它允许用户使用可以使用AT命令设置的参数来修改设备的配置。当用户想要使用此模式读取或设置XBee / XBee-PRO Zigbee RF模块的任何参数时,用户必须发送AT命令。每个AT命令都以字母AT开头, 后跟标识命令的两个字符,然后是一些可选的配置值。

XBee / XBee-PRO Zigbee RF模块的操作模式由API Enable设置控制,但命令模式始终可用作在设备配置为任何操作模式时可以进入的模式。

UART接口上的命令模式适用于所有操作模式。用户无法使用SPI接口进入命令模式。

进入命令模式

要使设备切换到命令模式,必须 在一秒内发出以下序列: +++。+++ 序列之前和之后必须至少有一秒 。命令字符(CC)和序列(GT, guard time)之前和之后的静音都是可配置的。当满足入口标准时,设备在UART上以OK \ r响应,表示它已成功进入命令模式并准备开始处理AT命令。

如果配置为在透传操作模式下运行,则进入命令模式时,XBee / XBee-PRO Zigbee RF模块停止发送数据并开始在本地接受命令。

注意键入+++后不要按Return或Enter键, 因为它会中断保护时间静音并阻止用户进入命令模式。

当设备处于命令模式时,它会侦听用户输入并能够在UART上接收AT命令。如果 经过 CT 时长(默认为10秒)没有任何用户输入,则设备退出命令模式并返回到先前的操作模式。用户可以通过发送CN命令强制设备离开命令模式。

用户可以在设备的配置设置中自定义命令字符,保护时间和超时。有关更多信息,请参阅 CC(命令字符), CT命令 和 GT命令。

故障排除

无法进入命令模式通常是由于波特率不匹配。确保连接的波特率与设备的波特率匹配。默认情况下,BD(接口数据速率,又称波特率) = 3(9600 b / s)。

进入命令模式有两种替代方法:

  • 串行中断6秒进入命令模式。用户可以从串行控制台发出“break”命令,它通常是一个按钮或菜单项。
  • 上电或复位时置有效DIN(串行中断)进入命令模式。XCTU引导用户完成重置并在需要时自动发出中断。

这两种方法都暂时将设备的波特率设置为9600,并 在UART上返回 OK以指示命令模式处于活动状态。当命令模式退出时,设备将以BD 设置的波特率恢复正常操作。

发送AT命令

设备进入命令模式后,使用下图中的语法发送AT命令。每个AT命令都以字母AT开头 ,代表“attention”。AT后跟两个字符,指示正在发出哪个命令,然后是一些可选配置值。

要读取存储在设备寄存器中的参数值,请省略参数字段。
enter image description here

示例将NI参数更改为My XBee。

多个AT命令
在命令模式下用逗号分隔时,可以一次发送多个AT命令; 例如, ATNIMy XBee,AC <cr>

示例将NI(节点标识符)更改 为My XBee, 并通过AC(Apply Changes)使设置生效。

参数格式
有关各个AT命令参数的格式,请参阅AT命令列表。十六进制值的有效格式包括带或不带前缀 0x ,例如 FFFF 或 0xFFFF。

响应AT命令

当使用AT命令设置参数时,如果成功则XBee / XBee-PRO Zigbee RF模块响应OK ,否则响应ERROR 。

对于具有文件系统的设备:

ATAP1 <CR>
OK <CR>

读取参数时,设备返回当前参数值而不是 OK 消息。

ATAP <CR>
1 <CR>

应用命令更改

在应用更改之前,使用AT命令对配置命令寄存器所做的任何更改都不会生效。例如,如果发送 BD 命令以更改波特率,则在应用更改之前,实际波特率不会更改。应用更改方式如下:

  1. 发送AC(Application Changes)。
  2. 发送WR命令。
  3. 退出命令模式。

使命令更改永久化

发送WR命令命令以保存更改。WR将参数值写入非易失性存储器,以便通过后续复位保持参数修改。

发送RE命令将使WR保存的设置擦除回其出厂默认值。

注意用户仍然必须使用WR 来保存使用RE制定的更改。

退出命令模式

  1. 发送CN命令后跟回车符。
    或:
  2. 如果设备在CT命令指定的时间内没有收到任何有效的AT命令 ,则返回透传或API模式。默认的命令模式超时为10秒。

有关使用AT命令对设备进行编程的示例以及每个可配置参数的说明,请参阅AT命令。

睡眠模式

休眠模式允许设备在不使用时进入低功耗状态。该设备在睡眠期间几乎完全关闭,并且在唤醒之前无法发送或接收数据。XBee设备支持引脚休眠(设备在引脚转换时进入的休眠模式),循环休眠(设备休眠一段固定时间)。

有关更多信息,请参阅管理终端设备。


http://www.ppmy.cn/news/774593.html

相关文章

解决\xEF\xBB\xBF问题

解决\xEF\xBB\xBF问题 参考文章&#xff1a; &#xff08;1&#xff09;解决\xEF\xBB\xBF问题 &#xff08;2&#xff09;https://www.cnblogs.com/mao2080/p/8178412.html &#xff08;3&#xff09;https://www.codeprj.com/blog/7ccaec1.html 备忘一下。

B22-9-5

假定有7个航班&#xff0c; 现在需要在某某到某某航班上增添座位&#xff0c;问怎样才是较优解。 题目&#xff1a;[2,5,3]&#xff0c;意思是在2-5的航班上&#xff0c;之间的每个航班增加三张票。 首先的步骤&#xff1a;写出1-7航班&#xff0c;并且在前后都多补充一个数&a…

ESP32-S的UART2的初始化需要注意的问题

简 介&#xff1a; 在使用ESP32-S的UART2的时候&#xff0c;初始化UART的ID需要设置成1&#xff0c;而不是2&#xff0c;这样可以避免ESP32热启动出现故障。具体原因并不清楚&#xff0c;但可以解决热启动程序执行的问题。在MicroPython输出汉字的时候&#xff0c;需要预先将汉…

xgboost

Xgboost 概念内容介绍来自七月在线头条号&#xff1a; xgboost一直在竞赛江湖里被传为神器&#xff0c;比如时不时某个kaggle/天池比赛中&#xff0c;某人用xgboost于千军万马中斩获冠军。 RF和GBDT是工业界大爱的模型&#xff0c;Xgboost 是大杀器包裹&#xff0c;Kaggle各…

时隔十年,再次上路 LRU缓存

这个博客是为了十年前找工作时候创建的&#xff0c;用来记录自己的积累&#xff0c;没想到&#xff0c;一晃十年&#xff0c;我又回到了这里&#xff0c;想Mark下&#xff0c;时光弹指一瞬&#xff0c;令人唏嘘。 记录一道代码题吧。 力扣 Problem: 146. LRU 缓存 思路 解题…

硬件电路设计--运算放大器(一)参数和分类

文章目录 前言一、运放分类1.1 功能分类1.2 按单颗IC封装1.3 第一脚的判断 二、运放参数2.1 理想运放2.2 实际运放2.3 数据手册中的重要参数2.3.1 供电电压Vs&#xff08;power supply&#xff09;2.3.2 虚短虚断2.3.3 输入偏置电流Ib2.3.4 噪声Vn2.3.5 静态电流IQ2.3.6 输入失…

lotus-shed 更改 Owner

lotus-shed 更改 Owner # lotus-shed actor set-owner --help NAME:lotus-shed actor set-owner - Set owner address (this command should be invoked twice, first with the old owner as the senderAddress, and then with the new owner)USAGE:lotus-shed actor set-owne…

组装一台计算机的配置,要不要自己动手组装一台电脑?一文告诉你答案!

如今&#xff0c;自己动手组装一台电脑成为了越来越多小伙伴的选择&#xff0c;最重要的原因就是因为DIY经济实惠&#xff0c;同样的一台电脑在电脑城可能要花费5000块&#xff0c;而自己从网上买配件组装的话可能4000多块就可以拿下&#xff0c;这节省的1000块可以让我们做很多…