How can I set PWM to input capture mode in Linux for EV1 board?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-03-01 12:03 PM
I am trying to configure the TIM2_CH4 to capture mode on EV1 board so I can sense a fan speed from a PWM fan but I keep getting
cat: read error: Connection timed out
I have configured the timer as follows:
&timers2{
pinctrl-names = "default", "sleep";
pinctrl-0 = <&tim2_pins_mx>;
pinctrl-1 = <&tim2_sleep_pins_mx>;
status = "okay";
/* USER CODE BEGIN timers2 */
dma-names = "ch3";
pwm {
/* enable PWM on TIM2 */
status = "okay";
};
/* USER CODE END timers2 */
};
tim2_pins_mx: tim2_mx-0 {
pins {
pinmux = <STM32_PINMUX('A', 3, AF1)>; /* TIM2_CH4 */
bias-disable;
drive-push-pull;
slew-rate = <0>;
};
};
tim2_sleep_pins_mx: tim2_sleep_mx-0 {
pins {
pinmux = <STM32_PINMUX('A', 3, ANALOG)>; /* TIM2_CH4 */
};
};
I am using TIM12_CH1 to generate a pulse and I have shorted the two pins on the board.
What am I doing wrong? Is there a better way to detect the sense on a PWM fan?
Solved! Go to Solution.
- Labels:
-
STM32MP15 Lines
-
TIM
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-03-03 12:02 PM
I needed to remove the following line:
dma-names = "ch3";
The instructions are misleading.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-03-01 11:59 PM
Hi,
this wiki page could help you:
https://wiki.st.com/stm32mpu/wiki/PWM_overview#How_to_use_PWM_capture_with_sysfs_interface
Regards.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-03-02 6:23 AM
Hi @PatrickF​ ,
That is the link I used but it doesn't seem to work, is there any other helpful material or example?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-03-03 12:02 PM
I needed to remove the following line:
dma-names = "ch3";
The instructions are misleading.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-03-04 12:23 AM
Hi @cfilipescu​ ,
I agree Wiki is misleading or most probably outdated.
Looking at DTS, for timer2 CH4, it should have been
dma-names = "ch4";
to use DMAMUX channel TIM2_CH4
We will ask for a wiki update/clarification.
Regards.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-03-04 1:37 AM
I got confirmation that wiki is OK.
In fact, PWM capture will use two timer channels (e.g. timer capture 1+2 for CH1 or CH2 pins and timer capture 3+4 for CH3 or CH4 pins) but one single DMA request to get period and duty-cycle ("ch1" DMA for timer capture 1+2 and "ch3" DMA for timer capture 3+4),
In your DT, you probably missed to enable the relevant DMAMUX channel, e.g.
/* Enable DMA "ch3" for PWM input on TIM2_CH4 */
dmas = <&dmamux1 20 0x400 0x5>;
dma-names = "ch3";
but I have not tested it.
Regards.
Regards,
Patrick
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-03-04 6:34 AM
@PatrickF​
I did test adding the dmas line as well and it did not solve the problem.
The reason is the proper dmas and dma-names are specific in the following file: https://github.com/STMicroelectronics/linux/blob/v5.10-stm32mp/arch/arm/boot/dts/stm32mp151.dtsi
So there is no need to specify them in my custom device tree.
I still think the wiki is wrong and should differentiate between what is already specified in the generic file (stm32mp151.dtsi) and what should be put in the custom device tree.
In my case, all I had to add was the status = "okay" since everything else was defined in the include file.
