ZYNQ硬件复位管脚和软件看门狗复位

问:实际应用中,是不是PS_SRST_B必须,但是POR不是必须?

答:POR是必须有的,不然只能掉电复位,POR都是画上的。POR是整个芯片最高级复位,就是整个芯片都会复位。PS支持外部上电复位信号。上电复位是整个芯片的主复位。此信号复位设备中能够重置的每个寄存器。

ZYNQ有两种复位模式:POR和none POR。作用域如下:

1,POR复位将会复位整个系统,通过PSPOR B管脚产生。

2,none POR复位,并不会复位所有的寄存器,可以通过PSSRST_B管脚,或者系统内部复位,如看门狗复位。

Program_B只操作PL,会初始化PL。PL需要重新加载,Program_B信号由高到底变化时,可以初始化PL,PL初始化时定义INIT_B管脚,初始化完成后,该管脚作为浮高开漏处理。

PS_SRST_B(External System Reset)功能和POR类似,主要用于系统软件调试过程,上电复位删除所有调试配置,外部系统复位允许用户复位设备内的所有功能逻辑,而不干扰调试环境。

例如:用户先前设置的断点在外部系统重置后仍然有效。当PS_SRST_B保持低位时,所有PS I/O都保持在三态。出于安全考虑,系统重置会删除PS中的所有内存内容,包括OCM,PL也在系统复位中复位,系统复位不会重新采样引导模式分配引脚。

PS网口可以挂在挂PS_SRST_B上电自动复位,给了

<think>我们之前已经讨论了使用MAX706为ZYNQ提供复位信号的基本方法。现在用户明确要求设计看门狗复位功能,因此需要利用MAX706的看门狗定时器功能来实现。 根据引用[1][2],ZYNQ本身也有看门狗定时器(SWDT),但用户希望使用外部MAX706的看门狗复位整个系统(包括ZYNQ)。 引用[3]提到核心板有复位按键复位芯片,且复位信号连接到PS_POR_B(上电复位PL侧的复位管脚,这个复位信号可以被外部复位电路(如MAX706的看门狗输出)驱动。 设计思路: 1. MAX706的看门狗功能需要由ZYNQ的GPIO定期“喂狗”(即触发MAX706的WDI引脚),如果程序跑飞无法喂狗,则MAX706的复位引脚会输出低电平复位信号。 2. 将MAX706的复位输出连接到ZYNQ复位输入(如PS_POR_B或SYS_nRST_I,根据引用[3])。 3. 在ZYNQ中编写程序,定期通过某个GPIO引脚给MAX706的WDI引脚一个脉冲(先高后低或先低后高,具体看MAX706要求)。 具体步骤: 步骤1:硬件连接 - MAX706的电源:VCC接3.3V(注意,如果ZYNQ系统是3.3V,则MAX706也使用3.3V供电,避免电平转换) - MAX706的GND接系统GND - MAX706的复位输出(RESET)连接到ZYNQ复位输入(如核心板的SYS_nRST_I,引用[3]提到此信号是3.3V,且连接到PS_POR_B) - MAX706的看门狗输入(WDI)连接到ZYNQ的一个GPIO(如MIO0,需在硬件设计时确定) - MAX706的MR(手动复位)可以接一个按键到地,实现手动复位(可选) 步骤2:MAX706看门狗配置 - MAX706的看门狗定时器超时时间由外部电容决定(具体参考MAX706数据手册)。典型连接:在WDIGND之间接一个电容,电容值决定超时时间。计算公式为: $$ t_{WD} = 1.6 \times 10^5 \times C_{WDI} $$ 其中,$ C_{WDI} $的单位为法拉(F),$ t_{WD} $单位为秒(s)。例如,使用0.1μF电容,则超时时间为: $$ t_{WD} = 1.6 \times 10^5 \times 0.1 \times 10^{-6} = 0.016s = 16ms $$ 这个时间通常太短,我们可以选择更大的电容,例如1μF(超时时间160ms)或10μF(1.6s)。根据系统需求选择。 注意:实际设计时,请以MAX706数据手册为准,不同型号可能有差异。 步骤3:ZYNQ软件设计 - 在ZYNQ的应用程序中,需要定期翻转连接到MAX706的WDI引脚的GPIO(即喂狗)。喂狗周期必须小于MAX706的看门狗超时时间。 - 例如,如果超时时间为1.6秒,则喂狗间隔应小于1.6秒(建议小于1秒)。 - 示例代码(基于裸机或Linux用户空间): ```c // 假设WDI连接的GPIO为MIO0 #define WDI_GPIO 0 // 具体GPIO号根据硬件设计 // 初始化GPIO void init_gpio() { // 配置MIO0为输出 // 具体寄存器操作或使用Xilinx SDK的GPIO驱动 } // 喂狗函数(翻转WDI引脚) void feed_dog() { // 写高 // 写低(或者反过来,取决于MAX706要求的触发方式) // 注意:MAX706的WDI要求电平变化,所以需要翻转 // 具体操作:先读当前状态,然后写相反状态 unsigned int current_val = read_gpio(WDI_GPIO); write_gpio(WDI_GPIO, !current_val); } int main() { init_gpio(); while(1) { // 业务代码 // ... // 喂狗 feed_dog(); // 延时,注意喂狗间隔要小于看门狗超时时间 delay_ms(900); // 如果超时时间为1.6s,则900ms喂一次 } return 0; } ``` 步骤4:测试 - 在程序中故意停止喂狗,观察系统是否复位(比如点亮一个LED,然后停止喂狗,看LED是否熄灭并重新开始初始化过程)。 注意事项: - 电平匹配:MAX706工作电压与ZYNQ的GPIO电压要一致(3.3V)。 - 复位信号驱动:MAX706的RESET输出是开漏输出(根据数据手册),因此需要上拉电阻(通常10kΩ)到3.3V。但有些MAX706型号是推挽输出,请查阅数据手册确认。 - 复位信号宽度:MAX706复位脉冲宽度固定(通常200ms),符合ZYNQ复位要求(一般要求几十毫秒以上)。 - 多个复位源:如果系统还有其他复位源(如按键),可以将其连接到MAX706的MR(手动复位)引脚,这样按键复位也会触发MAX706产生复位脉冲。 引用说明: - 使用MAX706看门狗复位整个ZYNQ系统,通过GPIO喂狗,当程序跑飞时无法喂狗,MAX706输出复位信号给ZYNQ复位引脚(如PS_POR_B)[^3]。 - 喂狗程序需要周期性地翻转WDI引脚,翻转周期小于看门狗超时时间[参考MAX706数据手册]。 相关问题: - 如何设置MAX706的看门狗超时时间? - 在ZYNQ中,如何通过GPIO控制外部看门狗芯片? - 如果系统进入低功耗模式,看门狗喂狗策略需要如何调整? </think>### 使用MAX706为ZYNQ设计看门狗复位的方法 MAX706是一款集成电源监控看门狗功能的芯片,可为ZYNQ提供可靠的硬件复位保护。以下是详细设计方法: --- #### 一、硬件连接设计 1. **核心信号连接** - MAX706的`RESET`输出(低电平有效) → ZYNQ的`PS_POR_B`(主复位输入,低电平有效)[^3] - MAX706的`WDI`(看门狗输入) → ZYNQ的GPIO引脚(如MIO0) - MAX706的`MR`(手动复位) → 外部按键(可选,用于手动触发复位) ```plaintext +----------------+ +----------------+ | MAX706 | | ZYNQ 7000 | | | | (XC7Z010/20) | | VCC --- 3.3V --+--------+ VCC_PS(3.3V) | | GND -----------+--------+ GND | | RESET ---------+-------> PS_POR_B (W27) | | WDI <----------+-------- MIO0 (GPIO) | | MR ---[按键]--| | | +----------------+ +----------------+ ``` 2. **电平与驱动配置** - 所有信号使用**3.3V电平**(与ZYNQ的PS Bank匹配)[^3] - `RESET`输出端添加**10kΩ上拉电阻**确保默认高电平 - 若驱动多设备,需增加**缓冲器**(如74LVC1G125) --- #### 二、看门狗工作原理 1. **超时机制** MAX706看门狗定时器需在超时前收到ZYNQ的喂狗信号(电平跳变)。超时时间由外部电容$C_{WD}$决定: $$t_{WD} = 1.6 \times 10^5 \times C_{WD}$$ 例如$C_{WD}=100nF$时,$t_{WD}=16ms$(根据需求调整电容值)。 2. **工作流程** ```mermaid graph TD A[ZYNQ程序运行] --> B{定期翻转GPIO} B -->|电平跳变| C[MAX706 WDI接收信号] B -->|超时未跳变| D[MAX706 RESET拉低] D --> E[ZYNQ强制复位] ``` --- #### 三、ZYNQ软件实现 1. **GPIO配置**(Vivado SDK示例) ```c #include "xgpiops.h" // 初始化GPIO(MIO0为喂狗引脚) XGpioPs_Config *gpio_config; XGpioPs gpio; gpio_config = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID); XGpioPs_CfgInitialize(&gpio, gpio_config, gpio_config->BaseAddr); // 设置MIO0为输出 XGpioPs_SetDirectionPin(&gpio, 0, 1); XGpioPs_SetOutputEnablePin(&gpio, 0, 1); ``` 2. **喂狗程序**(需在中断或主循环中调用) ```c void feed_watchdog(XGpioPs *gpio) { static u8 state = 0; state = !state; // 电平翻转 XGpioPs_WritePin(gpio, 0, state); } ``` 3. **看门狗集成到系统** - 裸机程序:在主循环中添加喂狗调用,间隔需**小于$t_{WD}$** - Linux驱动:通过内核定时器实现(参考引用[^4]的看门狗保护机制) --- #### 四、关键设计要点 1. **复位信号同步** - MAX706的复位脉冲宽度(典型200ms)需**覆盖ZYNQ初始化时间** - 在ZYNQ的PL逻辑中使用异步复位同步释放: ```verilog always @(posedge clk or negedge sys_rst_n) begin if (!sys_rst_n) reset_sync <= 2'b00; else reset_sync <= {reset_sync[0], 1'b1}; end assign logic_reset = !reset_sync[1]; // 同步后复位 ``` 2. **多复位源处理**(优先级设计) | 复位源 | 优先级 | 处理方式 | |--------------|--------|------------------------------| | 电源异常 | 最高 | MAX706自动触发 | | 看门狗超时 | 高 | MAX706触发 | | 手动按键复位 | 中 | 通过MAX706的MR引脚 | | 软件复位 | 低 | 通过ZYNQ内部看门狗[^1][^2] | 3. **故障防护** - 添加RC电路(如100Ω+100nF)滤除复位信号毛刺 - 在PCB布局中,复位信号走线**远离高频时钟线** --- #### 五、测试与验证 1. **基础测试** - 断开WDI连线,测量RESET是否在$t_{WD}$后输出低电平 - 触发按键复位,用示波器捕获复位脉冲宽度 2. **系统级测试** ```c // 故意触发看门狗超时 while(1) { // 阻塞喂狗(模拟程序跑飞) delay_ms(1000); // 超过t_WD } ``` - 预期结果:系统在$t_{WD}+200ms$内重启 3. **边界条件验证** - 电源跌落测试:将VCC缓慢降至2.9V,验证复位触发 - 温度测试:-40℃~85℃范围内验证复位稳定性 > **提示**:实际部署时可启用ZYNQ内部看门狗(SWDT)作为二级保护[^1],形成双看门狗冗余机制。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒听雪落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值