PIN/PAD Design in SoC - 0 (待续)

本文总结了芯片IO设计的经验,包括PAD开口尺寸确定、IO类型选择、IO控制器设计等内容,旨在帮助作者和读者加深对芯片物理实现细节的理解。
估计会有一段时间不做SoCIntegration方面的工作了,所以花时间总结了一下之前关于芯片的IO设计的一些经验,主要是方便自己将来重新拾起,同时也希望能和大家分享、讨论和学习。内容很简略,基本都是一句话。

先啰嗦一下这项工作的责任,曾经有个面试官还以为这个工作是自己设计IOcell的电路,误会无处不在。这项工作还是挺有意思的,有助于理解芯片的物理实现细节,对于非微电子专业出身的芯片设计者来说尤其是个加深理解芯片的机会。

这项工作不是从头去设计一个IO或者PAD的电路结构,做SoC的Design House一般都是在SoC芯片中例化现成的IOcell和PAD,这些cell一般是由foundry或者IP提供商提供的。

主要工作按内容可以分为:
1.修改PAD opening
2.例化IO cells
3.设计IO Controller

按技术要点可以分得更细:
1.确定PAD opening尺寸
2.IO类型选择
3.IO controller
4.IO floorplan
5.Bonding Map(封装)
6.设计自动化

接下来会按照后面一种分类陆续总结。未完待续!哈哈!
<think>嗯,用户在全志T113-i的U-Boot中配置PWM0时遇到了DTS语法错误。首先,我需要看看他提供的DTS代码和报错信息。错误提示是第128行13-19字符处的语法错误,导致解析失败。 首先,我应该检查DTS节点的语法是否正确。用户配置了pwm0_pin_a和pwm0_pin_b两个节点,然后在&pwm0中引用了它们。可能的错误点包括节点命名、属性拼写以及属性值的格式。 注意到在pwm0_pin_a节点中,muxsel被设置为5,而pwm0_pin_b中muxsel是0。全志的DTS通常使用pinctrl的配置,可能需要检查正确的muxsel值是否符合硬件文档。不过,更常见的问题可能是节点名称中的“@”符号。在DTS中,节点名后的“@”通常用于带地址的节点,比如pwm0@0x0300a000,但在这里用户可能只是定义了两个不同的状态,所以使用“@0”和“@1”可能不合适,或者需要正确的地址。不过,这可能不是导致语法错误的原因,因为语法错误通常在解析阶段就会发生,可能是结构问题。 接下来,检查语法错误。比如,属性名是否正确,比如“bias-pull-up”是否正确,或者是否需要写成“bias-pull-up;”。用户写的是正确的,带有分号。另一个可能是使用了过时的属性名,例如“muxsel”是否应该替换为“function”或者其他属性?或者全志的DTS是否使用不同的配置方式,比如使用phandle来引用pinctrl配置? 另外,检查pinctrl-0pinctrl-1的引用是否正确。用户是否正确地引用了两个pin配置节点?比如,是否需要用尖括号包裹phandle,比如pinctrl-0 = <&pwm0_pin_a>;,这里用户确实是这样写的,所以这部分可能没问题。 再考虑报错的具体位置,第128行13-19字符,可能是某个节点的定义部分有错误。比如,可能某个属性后面缺少分号,或者括号不匹配。例如,在pwm0_pin_a节点中,每个属性是否都以分号结尾?用户的代码中,每个属性都有分号,所以可能没问题。 另一个可能性是节点名称中的特殊字符,比如“@”符号是否需要转义,或者是否在DTS版本中有不同的要求。例如,某些情况下,节点名中的“@”后面需要跟地址,而用户这里用了数字,但可能地址不正确。或者,用户应该将节点名改为不带“@”的,例如pwm0_pin_a: pwm0_pins_a这样的命名方式。 也有可能是在全志的DTS中,pinctrl的配置需要遵循特定的格式,例如使用“sunxi,pins”属性而不是“pins”。例如,有些全志平台的DTS会这样写: pins = "PD16"; function = "pwm0"; allwinner,muxsel = <5>; 这可能是因为全志的pinctrl驱动使用特定的属性名,比如“allwinner,muxsel”而不是“muxsel”。用户可能错误地使用了“muxsel”,而正确的属性应该是“allwinner,muxsel”。这时候,将muxsel改为allwinner,muxsel可能解决问题。 另外,检查drive-strength的单位是否正确,是否应该写成<10 10>或者其他形式?不过如果是语法错误,可能数值格式不正确,比如应该用十六进制如<0xa>,但用户写的是十进制10,这可能没问题,但需要确认。 再看错误信息中的具体位置:arch/arm/dts/.board-uboot.dts:128.13-19,即第128行的第13到第19个字符。假设第128行是类似这样的内容: pinctrl-0 = <&pwm0_pin_a>; 那么可能错误出在引用符号是否正确,或者节点名是否正确。或者,可能前面的某个节点定义缺少了闭合的括号,导致后续解析错误。 另外,用户是否在配置中重复定义了某个节点,或者节点名称冲突?比如,两个节点都命名为pwm0@0和pwm0@1,可能导致DTS解析错误,因为同一节点名可能重复。 或者,可能在全志的DTS中,PWM节点的pinctrl配置需要特定的格式,比如使用不同的pinctrl命名空间,或者需要将pin配置放在正确的父节点下,比如在pio节点下定义这些pin配置。 总结可能的错误点: 1. 使用了错误的属性名,比如muxsel应改为allwinner,muxsel。 2. 节点命名中的“@”符号使用不当,可能需要修改节点名。 3. 缺少必要的属性或格式错误,例如驱动强度或其他参数。 4. 括号或分号缺失导致结构错误。 用户提供的错误是语法错误,所以应该优先检查DTS的结构是否正确,比如括号是否匹配,属性是否正确,分号是否遗漏。例如,可能在pwm0_pin_a或pwm0_pin_b的定义中,某个属性缺少分号,或者括号没有正确闭合。或者,在muxsel的行中,写成muxsel = 5;而不是使用尖括号<muxsel = <5>;。但用户已经正确使用了尖括号,所以可能不是这个问题。 另一个可能性是,全志的uboot DTS对pinctrl配置的兼容性问题,可能需要使用不同的节点结构或者属性。例如,某些平台要求pin配置节点必须位于某个父节点下,比如&pio下的子节点。 因此,正确的步骤可能是: 1. 检查每个属性是否正确,特别是全志特定的属性名。 2. 确保节点位于正确的父节点下,比如在&pio节点内部定义pin配置。 3. 检查是否有语法错误,如缺少分号或括号不匹配。</think>在全志T113-i的Uboot设备树配置中遇到pwm0报错,主要问题出在**节点命名规范**和**pinctrl属性定义**。以下是分步解析和解决方案: --- ### 错误原因分析 1. **节点命名冲突**: `pwm0@0` 和 `pwm0@1` 的命名方式违反设备树规范,`@`符号后应接寄存器地址或唯一标识符,而非序号。 2. **缺少必要属性**: 全志平台需要明确指定`drive`模式和`pull`状态,`bias-pull-up`的语法需用`pull = <xx>`格式。 3. **pinctrl配置位置**: Pin配置节点应定义在`&pio`(GPIO控制器)节点内,而非直接写在根节点下。 --- ### 修正后的配置方案 ```dts // 将pin配置放在pio节点内 &pio { pwm0_pin_a: pwm0-pin-a { pins = "PD16"; function = "pwm0"; // 功能模式 allwinner,muxsel = <5>; // 全志专用属性名 drive-strength = <10>; // 驱动强度 pull = <1>; // 上拉配置(1=上拉) }; pwm0_pin_b: pwm0-pin-b { pins = "PD16"; allwinner,muxsel = <0>; // 恢复GPIO模式 function = "gpio"; pull = <0>; // 关闭上下拉 input-enable; // 输入模式 }; }; // 配置pwm0控制器 &pwm0 { pinctrl-names = "active", "sleep"; pinctrl-0 = <&pwm0_pin_a>; pinctrl-1 = <&pwm0_pin_b>; status = "okay"; }; ``` --- ### 关键修改说明 1. **规范节点命名**: - 将`pwm0@0`改为`pwm0-pin-a`,避免`@`符号误用。 - 使用全志官方命名风格(如`allwinner,muxsel`)。 2. **完善GPIO属性**: - 使用`pull = <1>`代替`bias-pull-up`,`pull = <0>`表示关闭上下拉。 - 输入模式需明确添加`input-enable`属性。 3. **pinctrl归属**: -Pin配置移动到`&pio`节点内,符合全志硬件设计--- ### 验证建议 1. 检查DTS语法: ```bash dtc -I dts -O dtb -o test.dtb board.dts # 手动编译测试 ``` 2. 确认硬件手册: - 核对`PD16`是否支持PWM0功能。 - 确认`muxsel`值是否匹配目标模式(通常`5`为PWM,`0`为GPIO)。 若仍报错,建议检查全志SDK中同类开发板的DTS参考实现,对比pinctrl配置差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值