
1. 项目概述从数据帧到多机网络SCI通信的深度实践在嵌入式系统开发尤其是工业控制、汽车电子和分布式传感器网络领域微控制器之间的可靠、高效通信是系统设计的基石。串行通信接口SCI作为最经典、最广泛应用的异步串行通信协议之一其看似简单的“起始位数据位停止位”背后隐藏着一套精巧的机制用以应对从点对点调试到复杂多处理器网络的各种挑战。很多开发者对SCI的认知可能停留在配置波特率、收发数据的层面但在处理一主多从的现场总线或者需要区分命令与数据的复杂协议时往往会遇到数据错乱、从机响应异常等问题。其根源往往在于对SCI内置的多处理器通信模式理解不深。本次分享我将结合在多个工业项目中的实际踩坑经验深入解析SCI通信的两个核心可编程数据帧格式与多处理器通信模式。我们不止要看懂手册上的时序图更要弄明白在空闲线模式和地址位模式下每一个比特位的来龙去脉以及如何通过SLEEP、TXWAKE等关键控制位构建稳定可靠的多机通信链路。无论你是在调试RS-485总线还是在设计基于UART的私有协议理解这些底层机制都将让你在排查“灵异”通信故障时拥有清晰的思路和有效的手段。2. SCI数据帧格式不止是“8-N-1”提到串口数据帧很多人第一反应是“8位数据、无校验、1位停止位”即8-N-1。但这只是SCI强大可配置能力中的一种常见组合。一个完整的SCI数据帧Frame是由一个字符Character及其格式化信息共同构成的。2.1 NRZ编码与帧结构分解SCI采用NRZNon-Return-to-Zero编码这意味着在一位数据的持续时间内信号电平保持恒定高或低不会在中间回到零电平。这种编码简单可靠是异步通信的基石。一个标准的SCI数据帧包含以下部分其顺序是严格固定的起始位Start Bit总是1个比特位逻辑低电平0。它的作用是通知接收方“请注意一帧数据要开始了”接收器会以这个下降沿为基准启动内部时钟计数器对后续的数据位进行采样。数据位Data Bits这是信息的主体长度可以从1位到8位可编程通过SCICCR寄存器的SCICHAR2-0位配置。数据以LSB最低有效位先行的方式发送。例如要发送字节0xA5二进制1010 0101在线上看到的比特流顺序将是1LSB -0-1-0-0-1-0-1MSB。奇偶校验位Parity Bit可选用于简单的错误检测。通过SCICCR寄存器的PARITYENA位使能并通过PARITY位选择奇校验或偶校验。发送方会根据数据位中“1”的个数计算并附加一个校验位使得整个数据位校验位中“1”的个数为奇数奇校验或偶数偶校验。接收方进行同样的计算如果不符合预期则置位校验错误PE标志。注意奇偶校验只能检测奇数个比特的错误对于偶数个比特的错误无能为力。地址/数据标识位Address/Data Bit仅地址位模式这是多处理器通信模式地址位模式的专属位。当一帧是地址帧时该位为1是数据帧时该位为0。它紧跟在最后一个数据位或奇偶校验位如果使能的话之后。停止位Stop Bits总是逻辑高电平1长度可以是1位或2位通过SCICCR寄存器的STOPBITS位配置。它标志着一帧的结束并确保线路在下一帧起始位之前恢复到空闲高电平状态为检测下一个起始位的下降沿创造条件。下图清晰地展示了两种典型帧格式以8位数据为例空闲线模式/普通模式 | 起始位 | D0(LSB) | D1 | D2 | D3 | D4 | D5 | D6 | D7(MSB) | 奇偶校验位可选 | 停止位1或2位 | 地址位模式 | 起始位 | D0(LSB) | D1 | D2 | D3 | D4 | D5 | D6 | D7(MSB) | 奇偶校验位可选 | 地址位A/D | 停止位1或2位 |关键理解停止位的高电平状态就是线路的“空闲Idle”状态。因此帧与帧之间的间隔就是停止位高电平的延续。这个“空闲时间”的概念在空闲线多处理器模式中至关重要。2.2 寄存器配置实战SCICCR详解数据格式的所有配置都集中在通信控制寄存器SCICCR。我们结合代码来看如何配置一个常见的“8位数据、偶校验、1位停止位”格式并准备用于地址位多处理器通信。假设我们使用TI C2000系列DSP的SCI模块其寄存器通常以结构体或宏定义方式访问。// 假设 SCI-A 的控制寄存器映射到 SciaRegs 结构体 void SCI_ConfigDataFormat(void) { // 首先确保SCI处于复位配置状态通常通过SCICTL1的SW RESET位 SciaRegs.SCICTL1.bit.SWRESET 0; // 复位SCI // ... 其他初始化如波特率设置 // 配置SCICCR - 通信控制寄存器 SciaRegs.SCICCR.all 0; // 先清零 // 1. 设置字符长度8位数据 (SCICHAR 7) SciaRegs.SCICCR.bit.SCICHAR 7; // 2. 使能奇偶校验 (PARITYENA 1) SciaRegs.SCICCR.bit.PARITYENA 1; // 3. 选择偶校验 (PARITY 1) SciaRegs.SCICCR.bit.PARITY 1; // 4. 设置停止位1位停止位 (STOPBITS 0) SciaRegs.SCICCR.bit.STOPBITS 0; // 5. 选择多处理器模式地址位模式 (ADDRIDLE_MODE 1) // 如果选择空闲线模式则设置为0 SciaRegs.SCICCR.bit.ADDRIDLE_MODE 1; // 6. 可选使能回环测试模式用于自检 // SciaRegs.SCICCR.bit.LOOPBKENA 1; // 完成配置后退出复位状态 SciaRegs.SCICTL1.bit.SWRESET 1; }配置要点与避坑指南顺序很重要务必在SCI软复位SWRESET0期间或之后配置格式寄存器。如果在通信过程中动态修改可能导致正在传输的帧格式错乱。LSB先行是硬件行为我们只需要关心写入SCITXBUF或从SCIRXBUF读取的完整字节数据硬件会自动处理比特位的串行化与反串行化包括LSB先行的顺序。奇偶校验的计算范围如果使能了奇偶校验需要注意在地址位模式下地址位ADDR bit也会参与奇偶校验计算。这在设计通信协议时需要统一考虑确保收发双方计算一致。停止位的“检查”手册明确指出接收器只检查第一个停止位。即使你配置了2个停止位接收器也只在第一个停止位的时间点采样判断是否为高电平。如果采样到低电平会触发帧错误FE标志。第二个停止位实际上提供了更长的“保护时间”在噪声较大的环境中有利于提高可靠性。3. 多处理器通信模式解析从广播到寻址在多点通信网络中例如一个主控制器带多个从机传感器我们需要一种机制让主机能够与指定的从机对话而不影响其他从机。SCI硬件直接支持两种经典的多处理器协议空闲线模式和地址位模式。它们的核心思想都是“唤醒-寻址-通信”。3.1 核心状态机SLEEP与唤醒WAKEUP理解多处理器模式首先要抓住两个核心状态位SLEEP位SCICTL1.2可以理解为从机的“休眠开关”。当SLEEP1时从机SCI接收器处于“浅睡眠”状态。它仍然在接收数据但除非收到地址帧否则不会置位RXRDY标志也不会产生接收中断这避免了从机被发给其他设备的数据帧频繁打断。当从机识别出属于自己的地址帧后软件必须手动清除SLEEP0才能正常接收后续的数据帧。TXWAKE位SCICTL1.3与WUT标志这是主机用于发送地址帧或块起始信号的控制器。TXWAKE是软件可写的控制位而WUT是一个与之双缓冲的内部标志。当主机需要发送一个地址帧地址位模式或一个块起始空闲周期空闲线模式时就设置TXWAKE1然后写入一个数据地址值到SCITXBUF。硬件在发送这一帧时会根据TXWAKE的值自动在帧中插入地址标识地址位模式或延长空闲时间空闲线模式。3.2 空闲线模式Idle-Line Mode工作原理该模式通过检测通信线上超过10个比特位时间的空闲高电平来标识一个新数据块的开始。块内的数据帧之间是正常间隔1-2个停止位的时间而块与块之间则被一个长的空闲周期隔开。工作流程初始状态所有从机设置SLEEP1只监听地址帧。主机发送块起始信号主机有两种方法软件延时法在发送完上一个块的最后一帧数据后主动等待超过10个比特位的时间再发送地址帧。这种方法简单但效率低且依赖软件计时。硬件TXWAKE法推荐主机设置TXWAKE1然后向SCITXBUF写入一个“无关数据”内容任意。硬件会自动在上一帧停止位后发送一个精确的11位空闲时间。紧接着主机再写入真正的目标从机地址到SCITXBUF此时TXWAKE已被硬件自动清零。从机唤醒与地址识别所有从机检测到超过10位的空闲后硬件会临时“唤醒”接收器接收紧随其后的第一帧数据即地址帧。从机产生接收中断在中断服务程序中软件读取SCIRXBUF中的地址与自身地址比较。选择性休眠如果地址匹配该从机软件清除SLEEP0开始正常接收后续的所有数据帧RXRDY正常置位产生中断。如果地址不匹配从机保持SLEEP1忽略后续所有数据帧直到检测到下一个块起始空闲信号。适用场景与优缺点优点帧格式与标准UART完全兼容没有额外的地址位开销。特别适合数据块较大例如10字节的传输因为额外的地址位开销比例小。缺点块之间必须插入至少10比特的空闲时间降低了总线利用率尤其是在频繁发送小数据包的场景下。如果软件处理不当在数据流中意外出现10位空闲例如由于主机处理延迟可能导致从机误唤醒。空闲线模式配置示例void SCI_Master_IdleLine_SendBlock(uint16_t slave_addr, uint8_t *data, uint16_t len) { // 1. 确保处于空闲线模式 (ADDR/IDLE MODE 0) // 此配置通常在初始化时完成 // 2. 发送块起始信号设置TXWAKE并写入一个无关字节 SciaRegs.SCICTL1.bit.TXWAKE 1; SciaRegs.SCITXBUF 0x00; // 发送任意值触发11位空闲 // 3. 等待无关字节发送完成TXRDY变高 while(SciaRegs.SCICTL2.bit.TXRDY ! 1); // 4. 此时TXWAKE已自动清零WUT标志已置位。发送地址帧。 SciaRegs.SCITXBUF slave_addr; // 5. 等待地址帧发送完成 while(SciaRegs.SCICTL2.bit.TXRDY ! 1); // 6. 发送数据块 for(uint16_t i 0; i len; i) { SciaRegs.SCITXBUF data[i]; while(SciaRegs.SCICTL2.bit.TXRDY ! 1); // 等待发送缓冲区空 } // 数据块发送完毕线路恢复空闲。下一个块需要重复步骤2-6。 }3.3 地址位模式Address-Bit Mode工作原理该模式在每一帧的数据位和奇偶校验位之后增加了一个专用的“地址位”Address Bit。如果这一帧是地址帧则该位为1如果是数据帧则该位为0。从机通过检测每一帧的地址位来判断该帧的性质。工作流程初始状态同样所有从机SLEEP1。主机发送地址帧主机设置TXWAKE1然后写入目标从机地址到SCITXBUF。硬件发送该帧时会自动将地址位置1。发送完成后TXWAKE自动清零。主机发送数据帧主机直接写入数据到SCITXBUF此时TXWAKE0。硬件发送时地址位自动为0。从机地址识别所有从机检查每一帧的地址位。当收到地址位为1的帧时才会读取数据位并与自身地址比较。匹配则清除SLEEP开始接收后续地址位为0的数据帧不匹配则保持SLEEP1继续忽略。适用场景与优缺点优点无需在块间插入长的空闲时间总线利用率高。特别适合频繁发送小数据块例如≤11字节的场景。帧与帧可以紧密相连。缺点每一帧都增加了一个比特的开销地址位对于长数据块累积的开销可能超过空闲线模式的空闲时间开销。帧格式与标准UART不同需要通信双方都支持并理解地址位。地址位模式配置示例void SCI_Master_AddrBit_SendBlock(uint16_t slave_addr, uint8_t *data, uint16_t len) { // 1. 确保处于地址位模式 (ADDR/IDLE MODE 1) // 此配置通常在初始化时完成 // 2. 发送地址帧设置TXWAKE写入地址 SciaRegs.SCICTL1.bit.TXWAKE 1; SciaRegs.SCITXBUF slave_addr; // 此帧的地址位硬件会自动置1 while(SciaRegs.SCICTL2.bit.TXRDY ! 1); // 等待发送完成 // 3. TXWAKE已自动清零。发送数据帧。 for(uint16_t i 0; i len; i) { SciaRegs.SCITXBUF data[i]; // 此帧的地址位硬件会自动置0 while(SciaRegs.SCICTL2.bit.TXRDY ! 1); } // 发送完毕。如果要与另一个从机通信直接重复步骤2-3即可无需等待空闲。 }3.4 模式选择与工程经验选择哪种模式取决于你的应用场景数据块大12字节且通信不频繁优先选择空闲线模式。其帧格式标准兼容性好额外开销比例低。数据块小≤11字节或需要高频、实时通信优先选择地址位模式。总线利用率高响应快。需要与现有标准设备如MODBUS RTU over RS-485兼容必须使用空闲线模式因为MODBUS RTU协议本身就是利用3.5个字符时间的空闲作为报文帧间隔。一个重要的经验在地址位模式下从机的地址识别完全由软件完成。硬件只负责在SLEEP1时屏蔽掉地址位为0的帧的中断。当地址位为1的帧到来时无论地址是否匹配都会产生中断。因此在从机的中断服务程序中你必须读取收到的地址字节。与自身地址比较。如果匹配清除SLEEP位准备接收数据如果不匹配则必须直接退出中断并且不要读取SCIRXBUF或者读取后丢弃同时保持SLEEP1。这是一个常见的坑点如果误读了不匹配的地址帧会导致SCIRXBUF被清空影响后续操作。4. SCI通信的底层时序与中断机制理解了帧格式和多机协议我们还需要深入物理层和控制器层看看比特如何被可靠地发送和接收的以及如何高效地利用中断。4.1 波特率生成与采样机制SCI的通信时钟由低速外设时钟LSPCLK和波特率选择寄存器SCIHBAUD和SCILBAUD通常合并为16位的BAUD寄存器共同决定。计算公式通常为SCI Asynchronous Baud LSPCLK / ((BRR 1) * 8)其中BRR是写入波特率寄存器的16位值。例如LSPCLK100MHz目标波特率9600则BRR 100e6 / (9600 * 8) - 1 ≈ 1301。接收器的工作非常精巧起始位检测接收器持续采样RX引脚。当检测到连续4个SCICLK周期的低电平时才确认一个有效的起始位开始。这有效滤除了线上的短时毛刺噪声。数据位采样对于起始位之后的每个数据位、校验位和停止位接收器会在该比特位的中间时刻第4、5、6个SCICLK周期进行三次采样。最终比特值由“三取二”的多数表决决定。这极大地提高了在噪声环境下的数据可靠性。4.2 发送器与接收器信号流结合寄存器我们梳理一下数据流发送流程CPU写入数据到SCITXBUF- 数据转移到发送移位寄存器TXSHF-TXSHF将数据逐位推到TX引脚。TXRDY标志在SCITXBUF空时置位表示可以写入下一个数据。接收流程RX引脚采样 - 数据移入接收移位寄存器RXSHF- 一帧收完后数据从RXSHF转移到SCIRXBUF-RXRDY标志置位并可产生中断。关键点SCITXBUF和TXSHF是双缓冲的SCIRXBUF和RXSHF也是双缓冲的。这意味着CPU可以在上一帧还在串行发送时就准备下一帧数据写入SCITXBUF同样在CPU读取SCIRXBUF中上一帧数据时接收器可以同时接收下一帧到RXSHF。这提高了通信效率。4.3 中断管理与应用策略SCI有独立的中断向量通常分为接收中断和发送中断。接收中断源主要由RXRDY收到新数据和BRKDT检测到Break信号即长时间低电平触发。在多处理器模式下RXRDY中断仅在收到地址帧且SLEEP1时或任何帧SLEEP0时时产生。错误状态FE,OE,PE可以逻辑或产生一个RX ERROR中断。发送中断源主要由TXRDYSCITXBUF空可写入新数据触发。中断使用心得发送中断用于流控在需要连续发送大量数据的场景使用发送中断TXRDY比轮询效率高得多。中断服务程序ISR中检查是否还有待发数据有则写入SCITXBUF。接收中断处理要快接收中断RXRDY的优先级通常应高于发送中断以防止接收缓冲区SCIRXBUF因未及时读取而被新数据覆盖造成溢出错误OE。错误中断必不可少务必使能接收错误中断RX ERROR。帧错误FE、溢出错误OE、奇偶校验错误PE都指向物理层问题波特率不匹配、线路干扰、软件处理过慢需要在ISR中读取状态寄存器并做相应处理如清空缓冲区、重发、告警等。// 一个简单的接收中断服务例程框架以地址位模式从机为例 __interrupt void SCI_RX_ISR(void) { uint16_t rx_status SciaRegs.SCIRXST.all; // 读取状态寄存器 uint16_t rx_data; // 检查接收错误 if (rx_status 0x0007) { // 检查FE, OE, PE位 // 处理错误记录日志、清除错误标志等 // 错误标志需要通过软件读取SCIRXBUF或写特定值来清除 rx_data SciaRegs.SCIRXBUF.all; // 读一次以清除错误可能为无效数据 goto isr_exit; } // 无错误读取数据 rx_data SciaRegs.SCIRXBUF.bit.RXDT; // 判断是否在休眠模式 if (SciaRegs.SCICTL1.bit.SLEEP 1) { // 只有在地址位模式下且收到地址位为1的帧才会进入此中断 if (rx_data MY_SLAVE_ADDRESS) { // 地址匹配 SciaRegs.SCICTL1.bit.SLEEP 0; // 退出休眠准备接收数据 // 可以在这里设置一个标志通知主循环开始接收数据块 g_sci_rx_state RX_STATE_RECEIVING_DATA; } else { // 地址不匹配保持SLEEP1不做任何处理 // 注意这里不需要再次读取SCIRXBUF中断标志硬件已清除 } } else { // 正常接收数据模式 // 将rx_data存入用户缓冲区 g_rx_buffer[g_rx_index] (uint8_t)rx_data; // 检查是否接收完一个完整数据包... } isr_exit: // 清除中断标志具体操作取决于芯片可能是写1清零或自动清除 // 例如某些芯片需要写1到PIE应答寄存器 PieCtrlRegs.PIEACK.all PIEACK_GROUP9; }5. 增强功能FIFO与自动波特率检测现代的高性能微控制器如TI C2000的SCI模块通常还集成了增强功能显著提升了易用性和性能。5.1 FIFO功能详解与配置FIFO先入先出缓冲区是解决频繁中断问题的利器。标准SCI模式下每收/发一个字节就可能产生一次中断在高速通信时CPU负担很重。启用FIFO后发送和接收端各自拥有一个16级深度的缓冲区。发送FIFO你可以一次性写入最多16个字节到发送FIFO硬件会按照预设的延迟可编程自动将数据从FIFO加载到发送移位寄存器TXSHF中。仅当FIFO中的数据量低于你设定的触发水平TXFFIL时才会产生一次发送中断通知你补充数据。这大大减少了中断频率。接收FIFO硬件会持续将收到的字节存入接收FIFO。仅当FIFO中的数据量达到或超过你设定的触发水平RXFFIL时才会产生一次接收中断。你在中断服务程序中可以一次性读取多个字节。FIFO配置示例void SCI_EnableFIFO(void) { // 1. 确保SCI处于复位状态 SciaRegs.SCICTL1.bit.SWRESET 0; // 2. 使能FIFO模式 SciaRegs.SCIFFTX.bit.SCIFFEN 1; // 3. 配置发送FIFO SciaRegs.SCIFFTX.bit.TXFFIL 0; // 发送FIFO空时产生中断最及时 SciaRegs.SCIFFTX.bit.TXFFIENA 1; // 使能发送FIFO中断 SciaRegs.SCIFFTX.bit.TXFIFOXRESET 1; // 释放发送FIFO复位 // 4. 配置接收FIFO SciaRegs.SCIFFRX.bit.RXFFIL 8; // 当接收FIFO中有8个或以上字节时产生中断 SciaRegs.SCIFFRX.bit.RXFFIENA 1; // 使能接收FIFO中断 SciaRegs.SCIFFRX.bit.RXFIFORESET 1; // 释放接收FIFO复位 // 5. 可选配置发送延迟 // 设置FFTXDLY为0实现背靠背连续发送设置一个值可在帧间插入延迟。 SciaRegs.SCIFFCT.bit.FFTXDLY 0; // 6. 退出SCI复位 SciaRegs.SCICTL1.bit.SWRESET 1; }使用FIFO后你的发送/接收中断服务程序将处理数据块而非单个字节效率大幅提升。5.2 自动波特率检测原理与局限自动波特率检测Auto-Baud Detection功能允许SCI模块自动检测并锁定主机发送的波特率无需手动配置匹配。其原理通常是检测主机发送的特定字符如字符A或a其ASCII码为0x41或0x61具有特定的位模式01000001或01100001通过测量起始位和第一个下降沿到第一个上升沿或特定比特位的时间来计算比特周期。使用序列使能自动波特率检测模式设置CDC位。将波特率寄存器初始化为一个较低的值如对应9600bps或更低。等待主机发送字符A。硬件检测到匹配的波形后自动计算并更新波特率寄存器并设置ABD标志、产生中断。在中断中软件清除CDC位以锁定波特率并读取SCIRXBUF以清空接收到的A。重要限制自动波特率检测对信号质量要求较高。在高速率通常超过115200bps下由于信号边沿的上升/下降时间、线路寄生电容等因素测量可能不准确导致锁定失败。因此自动波特率常用于初始引导或低速配置阶段。在确定波特率后建议切换到固定波特率模式进行高速通信。许多Bootloader程序利用此功能与上位机建立初始连接。6. 常见问题排查与调试技巧在实际项目中SCI通信问题层出不穷。以下是一些典型问题及排查思路问题1通信完全无反应收不到任何数据。检查清单物理层线缆是否连接正确TX/RX是否交叉共地是否良好RS-485的使能信号DE/RE控制是否正确基础配置波特率、数据位、停止位、校验位是否与对端严格一致时钟源LSPCLK频率是否正确引脚复用SCI的TX/RX引脚功能是否通过GPIO复用寄存器正确开启模块使能SCI模块本身是否已使能例如有的芯片需要配置外设时钟控制寄存器SWRESET位是否已置1退出复位中断与FIFO如果使用中断或FIFO是否已正确配置和使能中断向量表是否正确注册问题2能收到数据但全是乱码。首要怀疑波特率这是最常见的原因。使用示波器或逻辑分析仪测量实际比特宽度计算波特率是否与配置值相符。检查系统时钟配置、波特率计算分频值BRR是否正确。检查帧格式数据位长度、停止位数量、奇偶校验设置是否匹配。例如主机8-N-1从机配置为8-E-1就会因校验错误而收不到正确数据或触发PE错误。信号质量问题在长距离或干扰环境下使用示波器观察波形看是否存在过冲、振铃、毛刺或电平不标准的情况。可能需要增加终端电阻、降低波特率或使用屏蔽线。问题3多机通信中某个从机不应答或所有从机都应答。检查地址识别逻辑在从机中断中打印或调试收到的地址字节确认是否正确。检查地址比较逻辑。检查SLEEP位管理从机在识别到自身地址后是否正确清除了SLEEP位在完成本机数据接收后是否及时重新置位SLEEP主机在发送完一个数据块后是否发送了正确的块结束信号空闲线模式的长时间空闲或下一个地址帧地址位模式下的奇偶校验如果使能了奇偶校验确认地址位是否参与了校验计算收发双方算法是否一致。总线冲突在RS-485半双工网络中检查收发切换时序。确保在发送前使能驱动器DE发送完成后延迟一段时间再切换回接收RE避免总线冲突。问题4通信一段时间后出现数据丢失或错误。溢出错误OE这是接收缓冲区SCIRXBUF或RX FIFO已满但新数据又到达导致的。根本原因是CPU处理速度跟不上数据接收速度。解决方案提高接收中断优先级使用接收FIFO并设置合理的触发水平优化接收数据处理代码避免在中断内进行复杂操作如果可能降低波特率。帧错误FE停止位采样到低电平。可能原因波特率微小偏差累积噪声干扰发送方未正确产生停止位。使用工具逻辑分析仪是调试串口通信的终极利器。它可以直观地展示每一帧的波形、比特宽度、数据内容以及帧与帧之间的间隔对于排查时序、格式、多处理器协议问题无可替代。调试技巧利用回环Loopback模式自检在初始化时可以临时使能SCICCR寄存器的LOOPBKENA位。在此模式下芯片内部的TX输出直接连接到RX输入。你可以自发自收以此验证SCI模块本身的软件配置、中断处理逻辑是否正确排除外部电路的影响。测试完成后务必禁用回环模式。