差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
digi:arm-embedded:ccmp2:dtanalysis [2024/10/17 15:38] – robin | digi:arm-embedded:ccmp2:dtanalysis [2024/10/28 13:27] (当前版本) – [后记:GPIO和DI调整] robin | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ===接口设备树研读和改写==== | + | ===接口设备树之PWM研读及变更为编码器输入接口==== |
+ | 设备树是对接口的文本描述,smartIOmux能生成设备树文件,一些开发板上没有的接口,或是更高层次的驱动,仍可能涉及到设备树的微调修改。 | ||
====接口设备树PWM片段的解读方法==== | ====接口设备树PWM片段的解读方法==== | ||
- | 下面以LVDS背光驱动为例,来分析设备树的相关要素和定义方法。通常,编译出镜像后,设备树位于:tmp/ | + | 下面以LVDS背光驱动为例,来分析设备树的相关要素和定义方法。 |
+ | |||
+ | 通常,编译出镜像后,设备树位于:tmp/ | ||
设备树可相互嵌套,所以常见的做法是板级的dts会include芯片和模块级的dtsi。大部分的接口或接口基础定义是在dtsi完成。对于特定的一个接口,我们通常需要从pin脚定义开始,如果没在dtsi中定义,或是需要给个关联性强的名称来覆盖定义,可以在板级的@pinctrl节点引用处定义它。 | 设备树可相互嵌套,所以常见的做法是板级的dts会include芯片和模块级的dtsi。大部分的接口或接口基础定义是在dtsi完成。对于特定的一个接口,我们通常需要从pin脚定义开始,如果没在dtsi中定义,或是需要给个关联性强的名称来覆盖定义,可以在板级的@pinctrl节点引用处定义它。 | ||
以LVDS的背光驱动模块为例,它是一个基于PWM驱动的接口,顶层片段位于: | 以LVDS的背光驱动模块为例,它是一个基于PWM驱动的接口,顶层片段位于: | ||
+ | |||
< | < | ||
panel_lvds_pwm_backlight: | panel_lvds_pwm_backlight: | ||
行 37: | 行 41: | ||
从名称上可以看出0和1分别对应的子节点,查到这两个定义,发现是同一引脚的两种模式: | 从名称上可以看出0和1分别对应的子节点,查到这两个定义,发现是同一引脚的两种模式: | ||
< | < | ||
+ | / | ||
ccmp25_pwm20_pins: | ccmp25_pwm20_pins: | ||
pins { | pins { | ||
行 45: | 行 50: | ||
}; | }; | ||
}; | }; | ||
- | 睡眠模式 | + | / |
ccmp25_pwm20_sleep_pins: | ccmp25_pwm20_sleep_pins: | ||
pins { | pins { | ||
行 53: | 行 58: | ||
</ | </ | ||
- | 结合名称来分析,这pinctrl-0是正常模式,而pinctrl-1是睡眠模式,对应ccmp25_pwm20_pins 用于正常操作模式,而 ccmp25_pwm20_sleep_pins 用于睡眠低功耗模式。大概是高电平时引脚功耗小。 | + | 结合名称来分析,这pinctrl-0是正常模式,而pinctrl-1是休眠模式,对应ccmp25_pwm20_pins 用于正常操作模式,而 ccmp25_pwm20_sleep_pins 用于睡眠低功耗模式。大概是高电平时引脚功耗小。 |
- | 这背光驱动应该是PWM输出,所以这是对应AF8和ANALOG所具备的功能,如果是作为编码器的输入捕获,是不一样的设置。 | + | 这背光驱动应该是PWM输出,这里对应的AF8和ANALOG所具备的功能,可以从STMP257手册查得,事实上,smartIOMUX已经默认将其设置为timer对应的功能。 |
====PLC中的编码器接口设备树==== | ====PLC中的编码器接口设备树==== | ||
- | 以MP257的参考设计为例,当前的smartIOMUX接口只能选择pwm接口功能而非编码器接口,所以它生成的设备树是这样的结构,分两个定时器节点和& | + | 以MP257的PLC参考设计为例,当前的smartIOMUX接口只能选择pwm接口功能而非编码器接口,所以它生成的设备树是这样的结构,分两个定时器节点和& |
< | < | ||
& | & | ||
行 104: | 行 108: | ||
</ | </ | ||
和 | 和 | ||
- | < | + | ccmp25_timers1_ch3_4_pins: |
- | ccmp25_timers1_ch3_4_pins: | + | |
pins { | pins { | ||
- | pinmux = < | + | pinmux = < |
- | | + | |
bias-disable; | bias-disable; | ||
}; | }; | ||
}; | }; | ||
- | ccmp25_timers1_ch3_4_sleep_pins: | + | ccmp25_timers1_ch3_4_sleep_pins: |
pins { | pins { | ||
- | pinmux = < | + | pinmux = < |
- | | + | |
}; | }; | ||
}; | }; | ||
- | |||
</ | </ | ||
- | 总体上来说,SmartIOMux生成的设备树片段,AF的功能块一般是对的,所以我们只要找出PLC参考设计中的编码器定时器接口,两个一组,可批量参考上面修改。因此先根据原理图和中定时器的DI引脚来定义pinmux,相邻的两个DI为一组: | + | 总体上来说,SmartIOMux生成的设备树片段,AF的功能块一般是对的,所以我们只要找出PLC参考设计中的编码器定时器接口,两个一组,可批量参考上面修改。 |
- | {{: | + | |
- | 对应的编码器接口表如下: | + | 在smartIOMUX中,pwm名称后有DI的序号,相邻的两个DI为一组,因此通过smartIOMUX可以很快查到对应编码器接口所对应的定时器和引脚,同原理图匹配: |
- | ^编码器 ^ 定时器 | + | |
- | | counter_DI_1_2 | + | {{: |
- | | counter_DI_3_4 | + | |
- | ... | + | 在smartIOMUX上把pwm和对应的编码器接口整理列表如下,以方便设备树修改: |
- | 以此类推,很快就可以改好编码器的设备树片段 | + | ^编码器 |
+ | | counter_DI_1_2 | pwm10,pwm11 | timers1_ch3_ch4 | ||
+ | | counter_DI_3_4 | pwm14, | ||
+ | | counter_DI_5_6 | pwm18,pwm19 | timers3_ch3_ch4 | PF13,PF3 | | | ||
+ | | counter_DI_7_8 | pwm22,pwm23 | timers4_ch3_ch4 | PD6,PF4 | | | ||
+ | | counter_DI_9_10 | pwm26,pwm27 | timers5_ch3_ch4 | PG2,PG1 | | | ||
+ | | counter_DI_11_12 | pwm30,pwm4 | timers8_ch3, | ||
+ | |||
+ | 按上面表格和之前DI_1_2的编码器接口格式,以此类推,很快就可以改好所有编码器的设备树片段。 | ||
+ | |||
+ | |||
+ | 为了方便版本管理,可以用git的方式来管理设备树源码,并以链接文件的形式通过deyaio工具来编译,请进一步参考:[[digi: | ||
+ | |||
+ | ====后记:GPIO和DI调整==== | ||
+ | 一般地,为了让编码器的输入使用同一个定时器的通道,我们在设计时应先添加DI, | ||
+ | 首先,在SmartIOMux里,把不同定时器的其中一个通道lock取消,这时可以看到,有中一个定时器通道可以选择,如下所示: | ||
+ | {{: | ||
+ | 但在添加时会告诉你无法解决冲突,我们这时可以去Pads处,查看可选的pad,本例是AC_7(但显示为黄色,表示有冲突可解决), | ||
+ | {{: | ||
+ | |||
+ | 这样我们再到Table View里查找AC_7,发现是某个GPIO占用了,先记录一下这个GPIO的相关定义和功能,把这个GPIO先暂时删除,添加好PWM对应的DI后,再把这个GPIO添加回来,让系统自动选择可用的GPIO即可。 | ||
+ | |||
+ | 疑问:作为编码器的输入,是否要使用lowpower的定时器,因为官方spec在这些定时器的功能中有专门的encoder mode, 但如果只要普通的input capture,只需普通的定时器即可。此外,还有TIM1和TIM8是高级控制功能的定时器,是否有专用的功能需要保留不用它们? | ||
+ | |||