Why do only these 3 PWM pins work but none others?

Hello folks,

I’m so frustrated. I can’t find any pattern to why I can only get 3 PWM pins to work. Particularly, when I try to send a PWM command to some pins using “bb.analogWrite” it crashes my BBB.

Error Details:
“Failed to find device tree fragment.”

My Findings:
Through some experimentation I’ve found this:
8_13 - Error
8_19 - WORKS

8_34 - Error

8_36 - Error

8_45 - Error

8_46 - Error

9_14 - WORKS

9_16 - Error
9_21 - Error

9_22 - WORKS

9_28 - Error

9_29 - Error

9_31 - Error

9_42 - Error

Can someone tell me exactly WHY each of these pins works or doesn’t work? I can’t really find a pattern to this so I’m stumped.

Thank you,

Also, I chose to explore these pins by doing:

/lib/firmware$ ls bone_pwm*

as stated on p.231 of Derek Molloy’s BBB book…

Thank you!!!


In your Molloy book, read about device trees, which set the default assignment
of the I/O pins. Also read about the pin-mux. And related topics like pin-mux helper
and device tree overlays. Then find the reference in the book
to the BBBP8 and BBBP9 header file spread sheets on the web site for the book
and down-load them.

There are up to eight different things that each pin can assigned to do.
The ones that are giving you errors have been assigned to do things other than
PWM. For instance, some are audio (mcasp0) pins, or some are LCD driver pins.

There are multiple ways to reroute the functions, and change them from the
default assignments, to the functions you want. But make sure that what they
are doing is not important to the operation of the BBB. Enough of it is in the book,
that you can figure it out.

And the next time you ask for help, be sure to say what version of BBB you have,
and what kind and version of OS you are running, because the answers/methods/rules
are different on different versions of OS and hardware.

— Graham

Thanks for the advice, Graham.

After disabling HDMI by editing uEnv.txt, I was able to gain functionality of these pins:

8_36 (works but requires EHRPWM1A but that is already in use by 9_14)
8_45 (works but requires EHRPWM2A but that is already in use by 8_19)
8_46 (this one seems to work well)

Can you please explain to me why disabling HDMI didn’t help 8_34 work?

By the way, I’m on Debian GNU/Linux 7 and my BBB was Rev. C.


Actually, I even tried to manually pass my P8_34 device tree overlay to the cape manager:

/lib/firmware$ sudo sh -c “echo bone_pwm_P8_34 > $ SLOTS”

Then it looked good, like:

root@beaglebone:~# cat $SLOTS

0: 54:PF—

1: 55:PF—

2: 56:PF—

3: 57:PF—

4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G

5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI

6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN

7: ff:P-O-L Override Board Name,00A0,Override Manuf,am33xx_pwm

8: ff:P-O-L Override Board Name,00A0,Override Manuf,bspwm_P9_14_6

9: ff:P-O-L Override Board Name,00A0,Override Manuf,bspwm_P9_22_13

10: ff:P-O-L Override Board Name,00A0,Override Manuf,bspwm_P8_19_4

11: ff:P-O-L Override Board Name,00A0,Override Manuf,bspwm_P8_46_b

12: ff:P-O-L Override Board Name,00A0,Override Manuf,bone_pwm_P8_34

But when I went to run the PWM channel, I got this error:

error: Failed to find devicetree fragment: bspwm_P8_34_2

Please help! Thanks!!!