RS232 Cape on BBB not working

I have a BBB and both LCD3 and RS232 capes. I have set LCD3 cape to slot0 and RS232 caps to slot 1 with the DIP switches.
The LCD3 works perfectly but I cannot get anything from the RS232 cape.
They both seem to be found - if I look at dmesg I can see:

[ 0.271366] bone-capemgr bone_capemgr.9: slot #0: ‘BeagleBone LCD3 CAPE,00A2,Beagleboardtoys,BB-BONE-LCD3-01’

[ 0.295560] bone-capemgr bone_capemgr.9: slot #1: ‘BeagleBone RS232 CAPE,00A1,Beagleboardtoys,BB-BONE-SERL-03’
[ 0.325646] bone-capemgr bone_capemgr.9: slot #2: No cape found
[ 0.362754] bone-capemgr bone_capemgr.9: slot #3: No cape found
[ 0.369007] bone-capemgr bone_capemgr.9: slot #4: specific override
[ 0.369049] bone-capemgr bone_capemgr.9: bone: Using override eeprom data at slot 4
[ 0.369078] bone-capemgr bone_capemgr.9: slot #4: ‘Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G’
[ 0.369209] bone-capemgr bone_capemgr.9: slot #5: specific override
[ 0.369245] bone-capemgr bone_capemgr.9: bone: Using override eeprom data at slot 5
[ 0.369273] bone-capemgr bone_capemgr.9: slot #5: ‘Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI’
[ 0.369783] bone-capemgr bone_capemgr.9: loader: before slot-0 BB-BONE-LCD3-01:00A2 (prio 0)
[ 0.369811] bone-capemgr bone_capemgr.9: loader: check slot-0 BB-BONE-LCD3-01:00A2 (prio 0)
[ 0.369937] bone-capemgr bone_capemgr.9: loader: before slot-1 BB-BONE-SERL-03:00A1 (prio 0)
[ 0.369961] bone-capemgr bone_capemgr.9: loader: check slot-1 BB-BONE-SERL-03:00A1 (prio 0)
[ 0.370091] bone-capemgr bone_capemgr.9: loader: before slot-4 BB-BONE-EMMC-2G:00A0 (prio 1)
[ 0.370116] bone-capemgr bone_capemgr.9: loader: check slot-4 BB-BONE-EMMC-2G:00A0 (prio 1)
[ 0.370176] bone-capemgr bone_capemgr.9: initialized OK.

a bit further down I see:

[ 0.374590] bone-capemgr bone_capemgr.9: loader: after slot-1 BB-BONE-SERL-03:00A1 (prio 0)
[ 0.374626] bone-capemgr bone_capemgr.9: slot #1: Requesting part number/version based 'BB-BONE-SERL-03-00A1.dtbo
[ 0.374656] bone-capemgr bone_capemgr.9: slot #1: Requesting firmware ‘BB-BONE-SERL-03-00A1.dtbo’ for board-name ‘BeagleBone RS232 CAPE’, version ‘00A1’

I don’t then see anything for quite a few lines before finding:

[ 3.605864] bone-capemgr bone_capemgr.9: failed to load firmware ‘BB-BONE-SERL-03-00A1.dtbo’
[ 3.614780] bone-capemgr bone_capemgr.9: loader: done slot-1 BB-BONE-SERL-03:00A1 (prio 0)

so for some reason it can’t find the firmware required.
I’ve checked in the compatibility list for capes and it says that rs232 cape is compatible.

I’ve also tried following this suggestion (Enable serial/UART/tty on BeagleBone Black) but that fails at the point marked “Then enable the overlay:”.

I’m running:
Linux beaglebone 3.8.11 #1 SMP Wed May 8 07:34:27 CEST 2013 armv7l GNU/Linux

Does anyone know how I can get the RS232 cape working?

We are working on the software support for the rs-232 cape to be used with the BeagleBone Black. For cape compatibility please visit

http://www.elinux.org/BeagleBone_Black_Capes

As soon as the support is ready it will be posted on BeagleBoardToys wiki.

Ah thank you David, I misunderstood before and thought it was already compatible - got it now. What a shame :frowning:
Is there anything I can do to help?

Not wishing to sit on my hands and just wait, I’ve gone back to the instructions found here (Enable serial/UART/tty on BeagleBone Black) and tried again realising my previous mistake was using a lower case “o” instead of a zero in one of the command lines. I’ve had more success and think I am almost there.

I started by creating the file BB-BONE-SERL.dts (see instructions above) but changed from uart5 to uart1 where required in the code.
I then compiled to a .dtbo file using:

dtc -O dtb -o BB-BONE-SERL-03-00A1.dtbo -b 0 -@ BB-BONE-SERL.dts

Notice the 00A1 rather than the 00A0 as specified in the instructions. The reason for this is that my RS232 cape has 00A1 specified in the EEPROM so it looks for firmware to suit that.

then after copying to the firmware directory with

cp BB-BONE-SERL-03-00A1.dtbo /lib/firmware/

I rebooted and since the cape is auto detected, the cape manager can find and load the new firmware.
So now after boot, dmesg shows it is loaded:

[ 3.317911] bone-capemgr bone_capemgr.9: slot #1: dtbo ‘BB-BONE-SERL-03-00A1.dtbo’ loaded; converting to live tree
[ 3.318113] bone-capemgr bone_capemgr.9: slot #1: #3 overlays
[ 3.318922] bone-capemgr bone_capemgr.9: slot #1: Applied #3 overlays.
[ 3.318943] bone-capemgr bone_capemgr.9: loader: done slot-1 BB-BONE-SERL-03:00A1 (prio 0)

and if I do
cat /sys/devices/bone_capemgr.9/slots
I get

0: 54:P—L BeagleBone LCD3 CAPE,00A2,Beagleboardtoys,BB-BONE-LCD3-01
1: 55:P—L BeagleBone RS232 CAPE,00A1,Beagleboardtoys,BB-BONE-SERL-03
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-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI

Which confirms it is in slot 1

and if I then do:

cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pingroups

I get:

group: pinctrl_uart1_pins
pin 96 (44e10980)
pin 97 (44e10984)

Which as far as I can tell is correct.

I moved the jumpers on the cape to UART1 position and checked that /dev/ttyO0 exists but when I write to ttyO0 I get no serial output:

echo hello > /dev/ttyO0

and when I read from ttyO0, I see nothing despite sending chars in from the PC

cat /dev/ttyO0

So I have not got something quite right - if anyone can offer any pointers as to where I am going wrong, that would be very much appreciated :slight_smile:

Hey,

I’ve the same problem as u,

I looked at the dmesg log :

[41854.512676] bone-capemgr bone_capemgr.8: part_number ‘enable-uart5’, version ‘N/A’

[41854.512844] bone-capemgr bone_capemgr.8: slot #6: generic override

[41854.512893] bone-capemgr bone_capemgr.8: bone: Using override eeprom data at slot 6

[41854.512944] bone-capemgr bone_capemgr.8: slot #6: ‘Override Board Name,00A0,Override Manuf,enable-uart5’

[41854.513244] bone-capemgr bone_capemgr.8: slot #6: Requesting part number/version based 'enable-uart5-00A0.dtbo

[41854.513297] bone-capemgr bone_capemgr.8: slot #6: Requesting firmware ‘enable-uart5-00A0.dtbo’ for board-name ‘Override Board Name’, version ‘00A0’

[41854.518086] bone-capemgr bone_capemgr.8: slot #6: dtbo ‘enable-uart5-00A0.dtbo’ loaded; converting to live tree

[41854.518545] bone-capemgr bone_capemgr.8: slot #6: #3 overlays

[41854.522759] omap_uart 481a8000.serial: did not get pins for uart4 error: -19

[41854.526040] 481a8000.serial: ttyO4 at MMIO 0x481a8000 (irq = 61) is a OMAP UART4

[41854.531592] bone-capemgr bone_capemgr.8: slot #6: Applied #3 overlays.

Maybe it explains, why it doesn’t works …

Mick,

From what I learned on a different thread, I was able to setup virtual capes that allowed me to hook up an XBee and a Roboclaw to two of the Uarts that are exposed on the expansion cables. Looking at the above, the pins that were exposed are used to create /dev/ttyO1. I believe /dev/ttyO0 is used for the console and have the pins that connect up to an FTDI 3.3v cable.

Warning I am not a Linux expert… Just learning as I go.
Kurt

I’ve the same problem as u,

[41854.522759] omap_uart 481a8000.serial: did not get pins for uart4 error: -19

[Maybe it explains, why it doesn’t works …

Hi Mick,
Your problem is slightly different - I do not get that message. Originally when I followed the instructions I got something like that but guessed that the pins for uart4 were already allocated therefore I decided instead to use uart1 and when I did that, I no longer received that message. Have a go yourself and see if you find the same.

I did realise late last night that I had got the MODEs wrong for using uart1. The instructions are written for using uart4 and they set the MODE for the pins to MODE6 which for those pins selects (uart4_rxd_mux2) and (uart4_txd_mux2) therefore I changed the MODEs to be 0x20 and 0x00 (i.e. MODE0) which for uart1 means it selects (uart1_rxd) and (uart1_txd) respectively. Sadly even with the correct MODEs, it still refuses to work.

It’s working! </jumping for joy>

Following up on Kurt’s suggestion, I changed the overlay fragment so that it forces it to create ttyO1 instead and with that change and the right mode selection, the RS232 cape is now working! I’ll write up and post my full code and instructions shortly - got to get a coffee first :slight_smile:

Ok, in case anyone wants the summarised details of how I got it working, I’ve put them on my blog - here.

eskimobob,

great write up!

any chance you would create a copy of it on the elinux.org wiki pages?

please note that two of the gpio control pins for the RS-485 are used by the onboard virtual capes. these will need to be changed before you can use it…

http://www.elinux.org/BeagleBone_Black_Capes

Dave

Hey,

What do u mean by “please note that two of the gpio control pins for the RS-485 are used by the onboard virtual capes.”

Thx

Mickae1,

the RS-485 cape utilizes two GPIOs as control lines for the RS-485 transceiver. the two GPIOs that it uses are already used on the BeagleBone Black for the onboard eMMC. you can see a list of which signals on the expansion headers are using by the virtual capes, along with a complete description of all the status of the capes here:

http://www.elinux.org/BeagleBone_Black_Capes

Dave

any chance you would create a copy of it on the elinux.org wiki pages?

Yes, happy to contribute something however small. I’ve applied for an account. May need to ask advice about where to put it on the wiki but shall have a look first.

please note that two of the gpio control pins for the RS-485 are used by the onboard virtual capes. these will need to be changed before you can use it…

Yes, thanks, spotted that after posting - will update my post to clarify :slight_smile:

Hi,
I’m also trying the same but for UART2 and while checking dmesg log it gives same error as yours omap_uart 481a8000.serial: did not get pins for uart2 error: -19
Did u figure out how to solve it ???

Thanks

The UART2 pins are not used by eMMC or HDMI virtual capes so you should be free to use those. Can you list what capes you have installed in the slots?
cat /sys/devices/bone_capemgr.*/slots

Hi Guys,

I’ve been reading your posts and i’m experiencing not the same problem but similar. When i try to load my cape (not RS232) from EEPROM it doesn’t work but when i do it manually it loads correctly.

I added to my uEnv.txt file the line “optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN” and according with my log the cape is recognized and correctly read from EEPROM, also my dtbo file is in lib/firmware but i get a message on log saying that “failed to load firmware” and i don’t understand why.

Can anyone give me some tips for what could be the problem?

Thanks.
Duarte Carona

Quinta-feira, 23 de Maio de 2013 22:40:10 UTC+1, eskimobob escreveu:

Hi,

Did you solve the problem. I am experience the same… The uEnv.txt does not make any diffferent, I could not even disable HDMI in boot time.