如何测试io口?

ZYNQ GPIO控制

http://xilinx.eetrend.com/blog/4908


上次我们已经把一个开源的Linux烧写到了MicroZed的QSPI Flash。这样在配置启动模式为QSPI并上电之后,我们就可以在Linux中与ZYNQ的GPIO进行交互了。在MicroZed上面,有一个LED(板子上的D3,在JTAG插座的边上)连接到PS的MIO管脚,如图1所示;LED和用户按钮在板子上的位置如图2所示。。

图1 D3的连接

图1 D3的连接

图2 LED D3和用户按钮SW1

图2 LED D3和用户按钮SW1

根据图1,只要我们控制PS的MIO47,即ZC7010芯片的B14管脚,为低电平,D3就能被点亮了。GPIO的驱动存放在/sys文件夹下(如果不知道的话可以用find / -name“”命令查找)。、连接USB-UART电缆到MicroZed,然后打开串口调试助手,再按一下MicroZed上的复位按钮,等待Linux启动完毕,就可以在串口调试助手里与Linux进行互动了。

输入ls /sys/class/gpio/命令,可以查看如何通过sysfs把GPIO的驱动导出。返回值为:export gpiochip0 unexport

为了控制MIO47,我们可以查看gpio47是不是已经被导出到sysfs文件系统。输入命令echo 47 >/sys/class/gpio/export和ls /sys/class/gpio,可以看到一个叫GPIO47的节点已经建立了,然后查看它的属性,输入ls /sys/class/gpio/gpio47,可以看到的属性有active_low, direction等。把它配置为输出管脚,输入:
echo out > /sys/class/gpio/gpio47/direction

然后更改它的属性,即给管脚状态赋值,输入:

echo 1 > /sys/class/gpio/gpio47/value

回车之后,D3就被点亮了。这时你的MicroZed上面应该有3中颜色的LED在发光了:一个是刚点亮的红色的D3;一个是标识配置完成状态的蓝色的D2,和表示供电正常的绿色的D5。

试验了完了和LED的交互,我们还可以在Linux里面对用户按钮SW1进行控制。从MicroZed的原理图上得知,SW1连接到PS的MIO51,也就是ZC7010的B9管脚。采用和前面类似的命令配置gpio51节点,只不过这次要配置为输入管脚。这时可以使用cat /sys/class/gpio/gpio51/value来捕捉管脚上的电平状态;当SW1没有被按下时,管脚状态为0;SW1被按下时,管脚状态为1。

这时可以把SW1和D3关联起来,这样控制SW1就能控制D3的状态了,首先关闭D3,输入echo 0> /sys/class/gpio/gpio47/value并回车。然后把二者的状态进行关联:
cat /sys/class/gpio/gpio51/value > /sys/class/gpio/gpio47/value

这样只要按着SW1输入上面的代码,D3就会点亮,否则D3不亮。

最省事的办法还是用一个死循环,即创建一个任务,一直查询SW1的状态并控制D3的点亮。这样只要按下SW1,D3就点亮了;只要松开,D3就灭了。按Ctrl+C就能中断死循环的运行了。使用的所有命令和结果如图3所示。

图3 所有命令

图3 所有命令

ls /sys/class/gpio/
export gpiochip0 unexport
zynq> echo 47 > /sys/class/gpio/export
zynq>ls /sys/class/gpio/
export gpio47 gpiochip0 unexport
zynq>ls /sys/class/gpio/gpio47
active_low direction power uevent
device edge subsystem value
zynq> echo out > /sys/class/gpio/gpio47/direction
zynq> echo 1 > /sys/class/gpio/gpio47/value
zynq> echo 0 > /sys/class/gpio/gpio47/value
zynq> echo 51 > /sys/class/gpio/export
zynq> echo in > /sys/class/gpio/gpio51/direction
zynq> cat /sys/class/gpio/gpio51/value
0
zynq> cat /sys/class/gpio/gpio51/value
1
zynq> cat /sys/class/gpio/gpio51/value > /sys/class/gpio/gpio47/value
zynq> cat /sys/class/gpio/gpio51/value > /sys/class/gpio/gpio47/value
zynq> cat /sys/class/gpio/gpio51/value > /sys/class/gpio/gpio47/value
zynq> cat /sys/class/gpio/gpio51/value > /sys/class/gpio/gpio47/value
zynq> cd/
-/bin/ash: cd/: not found
zynq>zynq> cd/
-/bin/ash: can't create cd/: Is a directory
-/bin/ash: zynq: not found
zynq> -/bin/ash: cd/: not found
-/bin/ash: -/bin/ash:: not found
zynq> echo while : > pb_lights_led.sh
zynq> echo do >> pb_lights_led.sh
zynq> echo ??cat /sys/class/gpio/gpio51/value > /sys/class/gpio/gpio47
/value?? >> pb_lights_led.sh
-/bin/ash: can't create /sys/class/gpio/gpio47/value??: nonexistent directory
zynq> echo ??cat /sys/class/gpio/gpio51/value >
-/bin/ash: syntax error: unexpected newline
zynq> /sys/class/gpio/gpio47/value?? >> pb_lights_led.sh
-/bin/ash: /sys/class/gpio/gpio47/value??: not found
zynq> echo ??cat
zynq> pb_lights_led.sh
-/bin/ash: pb_lights_led.sh: not found
zynq> echo "cat /sys/class/gpio/gpio51/value > /sys/class/gpio/gpio47/
value">> pb_lights_led.sh
zynq> echo done >> pb_lights_led.sh
zynq>chmod 755 pb_lights_led.sh
zynq> ./pb_lights_led.sh
^C
zynq>

<think> 嗯,用户询问在芯片浪涌测试时波形应该加在电源还是普通IO。这个问题涉及到芯片防护设计的关键细节,需要仔细分析。 从引用内容来看,浪涌主要来自两个途径:外部雷电和内部设备启停/故障[^1]。电源作为能量输入通道,自然是最容易受到浪涌冲击的部位。特别是当开关管突然断开时,电感效应会导致500V稳定电压产生高压浪涌[^1],这种瞬态冲击会首先作用于电源端。 对于普通IO,虽然也可能受浪涌影响,但风险程度和防护要求通常低于电源。引用[2][3]提到TVS选型时要考虑工作电压裕量,这个原则其实也适用于测试点选择——电源需要承受更严苛的测试条件。 不过用户可能还想了解具体测试标准差异。电源测试往往参考IEC 61000-4-5标准,采用1.2/50μs组合波;而IO测试可能根据应用场景采用不同波形。另外要注意,某些特殊IO(如以太网)的测试要求可能接近电源。 考虑到用户是工程师,回复应该强调工程实践要点:电源必须测试,关键IO酌情测试。同时提醒参考具体芯片规格书,因为如引用[4]所说,不同厂家参数差异较大。可以补充说明测试等级选择要考虑最终产品应用环境,比如工业设备比消费电子要求更高。 最后需要解释测试原理:电源的浪涌测试模拟电网干扰,IO测试则模拟静电放电或信号线感应雷击。这个理论基础能帮助用户理解测试必要性。 </think> 在芯片浪涌性能测试中,**浪涌波形应主要施加在电源(如 VDD、VCC 等供电引脚),其次根据应用场景考虑关键 I/O **。这是基于浪涌来源和芯片脆弱性的综合判断: ### 1. **电源是首要测试对象 (核心原因)** - **能量入**:外部浪涌(如雷电、电网波动)主要通过供电线路侵入系统。如引用所述,电感效应会导致电源产生高压浪涌(例如测试点从 500V 突升至更高电压)[^1]。 - **全局性影响**:电源网络连接整个芯片,其失效会导致系统崩溃。 - **标准要求**:IEC 61000-4-5 等电磁兼容标准明确将电源端作为浪涌测试的主要靶点。 ### 2. **I/O 需选择性测试 (特定场景)** - **外部连接需求**:若 I/O 连接长导线(如通信线、传感器线),可能感应雷击或开关浪涌,需测试防护能力。 - **高安全要求场景**:涉及人体接触的 I/O(如 USB、按键),即使概率低也需测试。 - **成本考量**:非关键 I/O 通常不做浪涌测试以节省成本。 --- ### 测试实践建议 1. **电源测试必备** - 施加标准浪涌波形(如 1.2/50μs 电压波 + 8/20μs 电流波) - 测试等级根据应用环境选择(工业设备通常高于消费电子) 2. **I/O 测试原则** ```mermaid graph LR A[I/O 类型] --> B{是否暴露于外部环境?} B -->|是| C{是否涉及安全/关键功能?} B -->|否| D[可不测试] C -->|是| E[必须测试] C -->|否| F[建议测试] ``` 3. **TVS 选型参考** 如引用[2][3]强调: - 电源 TVS 需满足: $$V_{RWM} \geq 1.3 \times V_{CC\_max}$$ (例如 5V 系统选 $V_{RWM} \geq 6.5V$) - I/O TVS 需满足: $$V_{RWM} \geq 1.2 \times V_{IO\_max}$$ --- ### 典型失效案例 - **电源未防护**:浪涌击穿电源管理单元,导致芯片烧毁(引用[1]中描述的 500V 突升场景)。 - **I/O 防护不足**:如引用[3]所述,TVS 选型未留裕量($V_{RWM}$ 接近工作电压),长期轻微导通引发过热损坏。 > 📌 **结论**:优先确保电源浪涌防护设计并通过测试,关键外部 I/O 按需追加测试。具体测试方法需结合芯片规格书(Datasheet)和行业标准(如 IEC 61000-4-5)[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值