ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

基于MAX14431与GD32VF103的隔离SPI通信链路设计

基于MAX14431与GD32VF103的隔离SPI通信链路设计

1. 项目缘起与整体设计思路

工业现场和嵌入式设备之间的通信,最怕两件事:一是地电位差把收发芯片打坏,二是现场的大电流干扰顺着信号线窜进MCU,轻则通信误码,重则整块板子报废。我在做一款工业数据采集终端的时候就踩过这个坑——两块板子分别由不同的开关电源供电,中间拉了一根一米多的排线走SPI,结果上电瞬间通信就时好时坏,用示波器一抓,地线上有将近2V的工频波动,SPI的时钟沿直接被淹没了。后来老老实实上了数字隔离器,问题才算彻底解决。

这次要聊的方案,就是用MAX14431BAEE+这颗四通道数字隔离器,把GD32VF103VBT6这颗RISC-V内核MCU的SPI链路隔离起来,让主控和外部从设备之间既能把数据传过去,又能把地环路和共模干扰挡在门外。标题里说的"隔离工业和嵌入式应用中的SPI通信链路",说白了就是解决"两个不同地电位的系统怎么安全地聊SPI"这个问题。

先把这个方案能干什么、适合谁讲清楚。它适合正在做工业采集板、电机驱动控制板、多节点传感器网络、以及任何需要把MCU和高压/远距离外设隔开的嵌入式开发者。如果你只是在一块板子上接个SPI Flash,那完全用不着隔离,纯属浪费成本;但只要你的SPI要跨板、跨电源域、跨长线缆,或者从设备侧存在高压、大电流、强干扰,那隔离就是绕不过去的一环。这个方案的核心价值在于:用一颗集成度较高的隔离器,把SPI的四根线(SCLK、MOSI、MISO、CS)一次性隔开,同时保证时序不崩、速率够用、成本可控。

整体设计思路其实不复杂,但每一步都有讲究。GD32VF103VBT6作为SPI主机,工作在3.3V逻辑电平,它的SPI外设支持标准四线模式,最高时钟可以跑到很高的频率,但隔离器这一环会限制实际可用速率,所以选型和时序规划必须提前算清楚。MAX14431BAEE+是四通道数字隔离器,通道方向可以配置,正好覆盖SPI的三根单向线加一根片选,或者在某些全双工场景下灵活调整。隔离的两侧各自有独立的供电和地,主控侧用3.3V,从设备侧根据实际情况可以是3.3V也可以是5V,隔离器本身负责电平转换和电气隔离两件事。

为什么选数字隔离器而不是光耦?这是很多人第一个会问的问题。光耦便宜、成熟,但速度上不去,普通光耦跑个几MHz就到头了,而且发光二极管会老化,传输延迟还随温度漂移,SPI这种对时序敏感的总线用光耦很容易在高速下丢数据。数字隔离器用的是变压器或者电容耦合,速度快、延迟小且一致性好、寿命长,虽然单价高一些,但在SPI这种场景下省心太多。MAX14431BAEE+这类器件的传输延迟通常在纳秒级,通道间匹配也好,对SPI时序的破坏很小。

再一个关键决策是隔离的边界放在哪里。我的做法是把隔离器放在主控和连接器之间,也就是说MCU侧、隔离器原边、以及原边的电源都在同一块板上,隔离器的副边和外部接口共地。这样布局的好处是隔离边界清晰,爬电距离和电气间隙容易控制,PCB上一条明显的"隔离带"把两边分开,走线和铺铜都不会越界。如果反过来把隔离器放到从设备那边,主控侧反而暴露在长线缆的干扰下,就失去意义了。

还有一点必须提前想明白:隔离之后,SPI的参考地变了,从设备侧的地是"浮"的,那么从设备的供电从哪来?常见做法是副边单独用一个隔离电源模块供电,或者如果从设备本身有独立电源,那就各供各的,只隔离信号。这两种情况对隔离器的要求略有不同,前者需要隔离器原副边都供电,后者也是,但副边电源的噪声特性会影响通信质量,选电源的时候要留意。我在项目里用的是一个小功率隔离DC-DC给副边供电,纹波控制在几十毫伏以内,实测对SPI没有可见影响。

2. 核心器件解析与选型考量

2.1 GD32VF103VBT6的SPI外设能力盘点

GD32VF103VBT6是兆易创新基于RISC-V内核的通用MCU,主频能到108MHz,片上资源对工业控制来说够用。它的SPI外设是我比较喜欢的一点:支持主机和从机模式,支持全双工和半双工,数据帧可以配成8位或16位,时钟极性和相位(CPOL/CPHA)四种模式齐全,波特率预分频从2到256可调。这意味着它能适配绝大多数SPI从设备,不管是Mode 0还是Mode 3,都能对上。

实际用的时候,SPI的时钟频率是总线时钟除以预分频系数。假设总线时钟配到108MHz,预分频取8,那SCLK就是13.5MHz。但注意,这个频率是MCU能发出来的,不代表隔离器能原样传过去。MAX14431BAEE+的数据速率上限是有明确指标的,选型时必须拿这个上限去反推SPI能跑多快,而不是只看MCU的能力。我一般会留出至少30%的余量,比如隔离器标称能到25Mbps,那SPI实际就跑15MHz左右,稳。

另外GD32VF103的SPI支持DMA,这点在大数据量传输时很关键。如果只是发几个字节的寄存器配置,轮询就够了;但如果要连续读写几百上千字节,比如刷一块SPI屏或者读一大片Flash,用DMA能大幅降低CPU占用,也避免因为中断延迟导致的时序抖动。我在项目里读外部ADC的采样数据就是走DMA,一次搬256字节,CPU几乎不参与。

2.2 MAX14431BAEE+隔离器的通道与方向配置

MAX14431BAEE+是四通道数字隔离器,它的通道方向不是固定的,而是通过引脚配置或者型号后缀来区分。这一点在SPI隔离里特别重要,因为SPI的四根线方向并不一致:SCLK是主机输出,MOSI是主机输出,MISO是从机输出,CS也是主机输出。也就是说,三根是主到从,一根是从到主。如果隔离器的四个通道方向全是同一个方向,那就没法用,必须选通道方向可配的型号,或者用两颗方向相反的器件拼。

MAX14431BAEE+的通道配置正好能满足这种"三正一反"的需求,具体哪几个通道朝哪个方向,要对照数据手册的引脚定义来接线。我踩过一次坑:第一版原理图没仔细看方向,把MISO接到了同向通道上,结果数据死活读不回来,查了半天才发现是方向反了。所以画原理图的时候,一定要把每个通道的方向标注清楚,最好在图上用箭头画出来,评审的时候一眼就能看出问题。

隔离器的供电是两侧独立的,原边VDD1和副边VDD2各自接各自的电源和地。两侧的电压可以不同,比如原边3.3V、副边5V,器件内部会处理电平转换。但要注意,两侧的电源必须在隔离器的推荐工作范围内,不能超压也不能欠压,否则要么不工作要么损坏。我在副边用5V给一个老式SPI从设备供电,原边3.3V接MCU,实测通信正常,电平转换这一环省了额外的芯片。

2.3 隔离电源的配套选择

信号隔离了,副边的电从哪来?这是很多人第一次做隔离时容易忽略的问题。如果从设备有自己独立的电源,那简单,各供各的,隔离器只隔信号。但更多时候,从设备就在同一块板上,只是需要和主控隔离,那就得给副边配一个隔离电源。

我用的是一颗小功率的隔离DC-DC模块,输入3.3V,输出3.3V,功率1W左右,足够给隔离器副边和一个小从设备供电。选它的时候主要看三个指标:隔离电压、输出纹波、负载调整率。隔离电压至少要覆盖系统可能出现的共模电压,工业场合一般按1500V以上选;输出纹波要小,因为SPI对电源噪声敏感,纹波大了容易误码;负载调整率决定了从设备电流变化时电压稳不稳。

这里有个经验:隔离DC-DC的开关噪声可能会耦合到SPI信号上,尤其是布局不好的时候。我的做法是在隔离电源的输出端加一级LC滤波,再并几个不同容值的电容,把高频噪声压下去。实测下来,加了滤波之后,SPI的误码率明显下降。另外,隔离电源的开关频率要尽量避开SPI时钟的谐波,虽然很难完全避开,但选个频率差得远的能减少耦合。

2.4 速率与时序的匹配计算

这一节是重点,因为隔离SPI最容易出问题的地方就是时序。数字隔离器会引入传输延迟,而且原边到副边和副边到原边的延迟可能不一样,这个差值叫通道间偏斜。SPI是全双工总线,主机发SCLK和MOSI的同时,从机在MISO上回数据,主机在SCLK的某个边沿采样MISO。如果MISO经过隔离后的延迟太大,超过了主机的采样窗口,数据就采错了。

具体怎么算?假设SPI跑Mode 0,主机在SCLK上升沿采样MISO。从机在SCLK下降沿把数据放到MISO上,数据经过隔离器传到主机,需要一段时间。主机在下一个上升沿采样,这中间的时间就是半个SCLK周期。所以隔离器的传输延迟必须小于半个SCLK周期再减去主机的建立时间。举个例子,SCLK跑10MHz,周期100ns,半个周期50ns。如果隔离器延迟是20ns,主机建立时间要求10ns,那50减20减10还有20ns余量,安全。但如果SCLK跑到20MHz,半周期只有25ns,20ns延迟加10ns建立时间就超了,必然出错。

所以选隔离器的时候,传输延迟这个参数比数据速率上限更值得关注。MAX14431BAEE+的延迟指标在同类器件里属于中等偏上,具体数值查手册,我一般按最坏情况算,留足余量。实测中,我把SPI配到8MHz,各种模式都试过,通信稳定,再往上到12MHz就开始偶发误码,说明时序余量已经不够了。最终产品定在6MHz,留了足够的安全边际。

3. 硬件设计与实操要点

3.1 原理图设计与通道方向核对

画原理图的时候,我习惯先把隔离器的引脚定义摊开,对照SPI的四根线一根一根接。GD32VF103的SPI0默认引脚是PA5(SCLK)、PA6(MISO)、PA7(MOSI),CS可以用任意GPIO,我用的是PA4。这四根线接到隔离器的原边,副边对应接到连接器或者从设备。

通道方向是第一个要核对的点。MAX14431BAEE+的四个通道,假设通道A和B是原到副,通道C和D是副到原,那SCLK、MOSI、CS走A、B、C,MISO走D。具体哪个通道是哪个方向,一定要查手册的引脚表,不能想当然。我见过有人把四个通道全接成同向,结果MISO完全没数据,还以为是MCU配置错了,查了一整天才发现是硬件方向问题。

第二个要核对的是使能引脚。有些隔离器有使能脚,不接或者接错会导致通道不工作。MAX14431BAEE+如果有使能,一般拉到对应侧的高电平或者直接接地使能,具体看手册。我一般会在使能脚上留一个下拉电阻,防止悬空导致状态不确定。

第三个是电源去耦。隔离器两侧的电源脚旁边都要放去耦电容,原边和副边各放一个0.1uF加一个1uF,尽量靠近引脚。去耦不好会导致隔离器内部电路工作不稳定,表现为通信随机出错,很难查。

3.2 PCB布局与隔离带处理

PCB布局是隔离设计里最考验功底的部分。核心原则就一条:隔离带两侧的铜皮、走线、过孔绝对不能跨过去。我在板上画一条至少2mm宽的禁布区,两侧的铺铜在这里断开,所有信号线只能通过隔离器本身跨越这条带。

隔离器的摆放位置要靠近连接器,这样副边的走线短,减少天线效应。原边的走线也要短,尽量直,避免绕远。SPI的SCLK是高速信号,走线要控制阻抗,虽然SPI频率不算特别高,但边沿陡,还是按50欧姆左右控制比较稳妥。我一般把SCLK和MOSI走成差分对的形式虽然它们不是差分信号,但并行走、等长、包地,能减少串扰。

爬电距离和电气间隙是安规要求,工业场合一般要求至少5mm的爬电距离。隔离器本身的封装决定了它能提供的隔离等级,但PCB上的走线间距也要配合。我在隔离带两侧的焊盘和走线之间留足间距,必要时开槽增加爬电距离。这一点在高压应用里尤其重要,不能省。

地平面处理也有讲究。原边和副边各有自己的地平面,两个地平面在隔离带处完全分开,不能有任何连接。有时候为了EMC,会在两个地之间跨接一个小电容,但这个电容的耐压必须足够,而且只在高频场合用,工频和直流场合不要加,否则隔离就白做了。

3.3 隔离电源的布局与滤波

隔离DC-DC的布局和普通DC-DC类似,输入输出电容靠近引脚,电感选屏蔽型的减少辐射。但它多了一个隔离要求:原副边的地和铜皮同样要分开,跨隔离带的只有变压器内部耦合,PCB上不能有连接。

输出滤波我用了两级:第一级是DC-DC输出端的陶瓷电容,第二级是LC滤波。电感选的是几微亨的功率电感,电容用10uF加0.1uF组合。实测滤波前后的纹波从100mV降到20mV左右,对SPI通信的稳定性提升明显。

还有一点:隔离电源的开关节点是强干扰源,布局时要远离SPI信号线,尤其是MISO这种从副边回传的弱信号。我一般把电源放在板子的一角,SPI走线走另一边,中间用地平面隔开。

3.4 连接器与外部接口的防护

隔离器副边出来的信号要经过连接器到外部。连接器选型要考虑机械强度和接触可靠性,工业场合我一般用带锁扣的排针或者端子。信号线上可以串小电阻(比如22欧姆)做限流和阻尼,减少振铃。如果外部线缆较长,还可以加TVS管做浪涌防护,但注意TVS的结电容不能太大,否则会影响SPI的高频特性。

外部接口的地要和副边地连在一起,不能和原边地有任何连接。如果外部设备有自己的地,那副边地就和外部设备地连,形成一个新的参考地。这时候整个系统的地关系要画清楚,避免形成地环路。

4. 软件配置与通信实现

4.1 GD32VF103的SPI初始化

GD32VF103的固件库用起来和STM32的HAL库思路类似,但寄存器操作更直接。SPI初始化的步骤是:开时钟、配GPIO为复用功能、配SPI参数、使能SPI。下面是我常用的初始化代码框架,以SPI0为例。

/* 使能GPIOA和SPI0时钟 */ rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_SPI0); /* 配置SCLK、MOSI为复用推挽,MISO为浮空输入 */ gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7); gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_6); /* CS用普通推挽输出 */ gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4); gpio_bit_set(GPIOA, GPIO_PIN_4); /* 默认拉高 */ /* SPI参数配置 */ spi_parameter_struct spi_init_struct; spi_init_struct.device_mode = SPI_MASTER; spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX; spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT; spi_init_struct.nss = SPI_NSS_SOFT; spi_init_struct.endian = SPI_ENDIAN_MSB; spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE; /* Mode 0 */ spi_init_struct.prescale = SPI_PSC_16; /* 108MHz/16 = 6.75MHz */ spi_init(GPIO_SPI0, &spi_init_struct); /* 使能SPI */ spi_enable(SPI0);

预分频系数我选了16,对应6.75MHz,这是实测下来最稳的速率。如果从设备支持更高速率,可以试8分频,但要做好误码测试。

4.2 字节收发函数的实现

SPI收发一个字节的典型写法是:等发送缓冲区空、写数据、等接收缓冲区非空、读数据。GD32VF103的库提供了spi_i2s_data_transmit和spi_i2s_data_receive两个函数,配合状态标志使用。

uint8_t spi_transfer_byte(uint8_t data) { /* 等待发送缓冲区空 */ while(RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_TBE)); spi_i2s_data_transmit(SPI0, data); /* 等待接收缓冲区非空 */ while(RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE)); return spi_i2s_data_receive(SPI0); }

这个函数是全双工的,发一个字节的同时收一个字节。如果只发不收,收到的数据丢弃即可;如果只收不发,发一个哑元(比如0xFF)来产生时钟。

CS的控制要单独做,拉低开始传输,拉高结束。注意CS的拉低和第一个SCLK之间要留一点时间,让从设备准备好,这个时间查从设备手册,一般几十纳秒就够。

4.3 DMA方式的大数据量传输

如果要连续读写大量数据,轮询方式会占满CPU。这时候用DMA更合适。GD32VF103的SPI支持DMA请求,配置好DMA通道后,SPI收发可以自动进行,CPU只需要等DMA传输完成中断。

配置DMA的步骤是:开DMA时钟、配DMA通道参数(源地址、目的地址、传输长度、优先级等)、使能SPI的DMA请求、使能DMA通道。发送和接收各用一个DMA通道,注意方向要配对。

/* 发送DMA配置 */ dma_parameter_struct dma_init_struct; dma_deinit(DMA0, DMA_CH2); dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL; dma_init_struct.memory_addr = (uint32_t)tx_buffer; dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE; dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT; dma_init_struct.periph_addr = (uint32_t)&SPI_DATA(SPI0); dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE; dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT; dma_init_struct.priority = DMA_PRIORITY_HIGH; dma_init(DMA0, DMA_CH2, &dma_init_struct); /* 接收DMA配置类似,方向改为外设到存储器 */ /* 使能SPI的DMA请求 */ spi_dma_enable(SPI0, SPI_DMA_TRANSMIT); spi_dma_enable(SPI0, SPI_DMA_RECEIVE); /* 使能DMA通道 */ dma_channel_enable(DMA0, DMA_CH2); dma_channel_enable(DMA0, DMA_CH3);

DMA传输完成后会产生中断,在中断里拉高CS、清标志、处理数据。注意DMA的传输长度要和实际数据量一致,否则会多传或者少传。

4.4 时序参数的实际调试

软件配好之后,一定要用示波器或者逻辑分析仪抓波形验证。我一般抓四个点:CS拉低到第一个SCLK的间隔、SCLK的频率和占空比、MOSI相对SCLK的建立保持时间、MISO相对SCLK的采样窗口。

实测中我发现,隔离器引入的延迟会让MISO的边沿变缓,尤其是上升沿。如果从设备的驱动能力弱,加上隔离器的输入电容,边沿可能变得很圆,导致采样点不确定。解决办法是在MISO线上加一个上拉电阻(比如4.7k),加快上升沿。但上拉太强会增加功耗,也可能和从设备的输出冲突,所以要试。

还有一个现象:SCLK经过隔离后,占空比可能会轻微变化,因为上升沿和下降沿的延迟不完全一样。如果从设备对占空比敏感,比如某些Flash要求40%到60%,那就要确认隔离后的占空比还在范围内。实测MAX14431BAEE+的占空比失真很小,6.75MHz下基本看不出变化。

5. 常见问题与排查实录

5.1 通信完全无数据的排查路径

第一次上电发现SPI完全没反应,读回来的全是0或者全是0xFF,这种问题最让人头疼。我的排查顺序是这样的:先确认电源,隔离器两侧的电压是否正常,用万用表量VDD1和VDD2,再看使能脚电平对不对。然后确认CS有没有正常拉低,用示波器看CS引脚,如果CS没动,那是软件问题,检查GPIO配置和片选函数。

如果CS正常但SCLK没有波形,检查SPI使能位和预分频配置,有时候预分频设太大,SCLK频率极低,示波器没抓到。如果SCLK有波形但MISO没数据,重点查隔离器方向,MISO对应的通道是不是配成了原到副,应该是副到原。再查从设备的供电和片选逻辑,有些从设备要求CS在SCLK之前拉低一定时间。

我遇到过一次,所有波形都正常,但数据就是错。后来发现是隔离器副边的地从连接器那边引入了干扰,导致隔离器内部逻辑误翻转。在副边地加了一个磁珠和电容滤波后解决。

5.2 高速下偶发误码的定位

低速正常、高速偶发误码,这是时序余量不足的典型表现。定位方法是逐步降速,找到误码消失的临界频率,然后取临界值的一半作为工作频率。同时用逻辑分析仪抓误码发生时的波形,看是哪个边沿出的问题。

常见原因有三个:一是隔离器延迟超了半个SCLK周期,降速或者换更低延迟的隔离器;二是MISO的建立时间不够,可以在从设备侧加驱动或者减小隔离器输入电容;三是电源噪声耦合,加强滤波或者调整布局。

我一般会在软件里加一个误码统计,连续发已知模式的数据,比如0x55和0xAA交替,收回来比对,统计错误率。这样能定量评估通信质量,比凭感觉靠谱。

5.3 隔离电源引起的干扰问题

隔离DC-DC工作的时候,开关噪声会通过空间或者传导耦合到SPI线上。表现是通信随机出错,而且和电源负载有关。排查方法是暂时用外部线性电源给副边供电,如果问题消失,那就是隔离电源的锅。

解决办法:一是加强输出滤波,LC加电容;二是调整布局,电源远离信号线;三是选开关频率更高的DC-DC,让噪声频率远离SPI的敏感频段;四是在SPI线上加共模扼流圈,抑制共模噪声。我用的是前两种,效果够用。

5.4 常见问题速查表

现象可能原因排查方法解决措施
完全无数据电源未上、使能脚错、CS未动量电压、看CS波形检查供电和GPIO配置
MISO恒为高/低隔离器方向反、从设备未驱动查通道方向、量从设备输出改正方向、检查从设备
低速正常高速误码时序余量不足降速找临界点降频、换低延迟隔离器
随机出错电源噪声、地环路换线性电源测试加强滤波、改布局
数据位错位CPOL/CPHA不匹配对照从设备手册改SPI模式
通信一段时间后失效隔离器过热、电源跌落摸温度、量电压降功耗、加强散热

5.5 几个容易忽略的实操心得

第一个心得:隔离器的两侧电源上电顺序可能影响通信。如果副边先上电、原边后上电,隔离器可能进入不确定状态。我的做法是在软件里加一个延时,等电源稳定后再初始化SPI。硬件上可以在电源上加一个使能控制,保证同时上电。

第二个心得:CS线如果也隔离,要注意CS的延迟。有些从设备对CS的建立时间和保持时间有要求,隔离后的CS延迟可能让从设备误判。如果CS时序紧张,可以考虑不隔离CS,只隔离SCLK、MOSI、MISO,但这样隔离就不完整了,要权衡。

第三个心得:调试的时候先用低速跑通,再逐步提速。我见过有人一上来就配最高速,结果各种问题,查了半天发现只是速率太快。低速跑通至少能证明硬件连接和基本配置没问题,然后再优化速率。

第四个心得:隔离器的通道间偏斜在SPI里影响不大,因为SPI的几根线不是严格同步的,SCLK和数据的偏斜由SPI模式本身容忍。但如果做多路SPI并行传输,偏斜就要认真算了。

6. 方案扩展与个人体会

这套隔离SPI的方案跑通之后,我把它扩展到了几个不同的场景。一个是多路SPI从设备的隔离,用多颗隔离器分别隔离每一路,主控通过不同的CS选择。另一个是把隔离器用在SPI和外部ADC之间,ADC在高压侧,主控在低压侧,隔离器既传数据又保安全。还有一个是把这套思路搬到I2C上,虽然I2C是双向总线,隔离起来比SPI麻烦,但原理相通。

如果后续要提升速率,可以考虑换用支持更高数据速率的隔离器,同时优化PCB走线,把SCLK的阻抗控制得更准。另外,如果从设备侧需要更大的驱动能力,可以在隔离器副边加缓冲器,但要注意缓冲器引入的额外延迟。

我个人在实际操作中的体会是,隔离SPI的难点不在隔离器本身,而在整个链路的时序和电源完整性。隔离器只是一个器件,选对了、接对了就行,但电源噪声、地平面处理、走线布局这些"周边"问题才是真正决定成败的地方。我踩过的坑大多不是隔离器坏了,而是电源没滤干净、地没分彻底、走线绕远了。所以做这类设计,一定要把隔离当成一个系统工程来做,而不是简单地在信号线上串个器件。

最后再分享一个小技巧:调试隔离SPI的时候,如果手头没有高端逻辑分析仪,可以用MCU自己做一个简单的误码测试。让主控发一串已知数据,从设备回环回来,主控比对,统计错误。这个方法不需要额外设备,能快速判断通信质量,特别适合在现场调试时用。

返回列表