TLC2543是TI的12位逐次逼近型ADC,采用3线接口,FPGA端只需引出CS(片选)、CLK(时钟)、DIN(双向数据)三根信号线。它和标准SPI最大的区别在于:SPI是4线全双工(MOSI与MISO各占一根),而TLC2543把通道选择(写)和ADC结果(读)复用在了DIN这一根线上。时序上,CS拉低后第1个CLK周期为空操作(同步),之后12个CLK依次移出12位数据;通道选择靠前3个CLK的下降沿采样,没有独立的地址总线,也无需单独的写数据线。
TLC2543不是标准SPI从设备。在CLK上升沿,DIN输出ADC采样结果(FPGA读);在CLK下降沿,FPGA把控制位移入DIN(写通道选择S1/S2/S3、模式位、增益位)。这种半双工、双向的设计是TI早期ADC的典型风格。对FPGA来说好处很明显:一根IO同时完成读数据和写控制,省引脚、省布线,硬件原理图上也干净。
时序三步走,状态机一次跑通
同步:CS拉低后等1个完整CLK周期,让TLC2543内部状态机复位到初始态。
写通道:第1~3个CLK下降沿,依次送入S1、S2、S3(二进制对应通道0~7),同时完成增益和模式位的写入。
读数据:第4~15个CLK上升沿,D11→D0依次移出(MSB first),共12位。
结束:第15个CLK之后CS拉高,芯片进入Standby,等待下一次转换。
几个容易踩的坑:
FPGA的CLK频率上限25MHz,实际建议5~10MHz,给DIN的建立/保持时间留余量。
CS上升沿到首个CLK上升沿的间隔要≥50ns,否则第1拍会采到不定态。
读阶段DIN必须释放为高阻(assign din = read_en ? 'bz : ch_sel_reg;),否则FPGA和ADC同时驱动会短路。
Verilog状态机骨架:IDLE → SYNC(1拍) → WRITE_CH(3拍) → READ_DATA(12拍) → DONE,每拍由CLK上升/下降沿触发,用计数器控制节拍即可。
总结与思考题
TLC2543的3线接口本质是"1根线干两件事",抓住同步、写通道、读数据三步,状态机写通就能直接复用。
思考:如果板上同时挂了8片TLC2543共用一组CLK,FPGA端怎么安排各自的CS和DIN时序才不打架?
下一步
如果你正卡在外设ADC接口上,或想从Verilog基础一路学到JESD204B高速串行,点官网右下角会话窗口,跟宸极教育的FPGA讲师一对一沟通。课程共31章、21个实战项目,从点灯、串口到企业级DAC系统逐层拆解,帮你把"会写代码"变成"能交付系统"。
未经许可,禁止转载!