I am using UART1 (and 2 and 4) on BBB with Camkes.

I think you need to set the pin mux on the board.  Linux does this with something called device tree overlays (https://learn.adafruit.com/introduction-to-the-beaglebone-black-device-tree/device-tree-overlays). 

Sel4 and Camkes don't provide away to  set the mux for the pins (that I am aware of), So you have do it before booting the kernel.

I haven't found a particularly clean way to do this yet.  Currently I am just using UBoot to set the pin muxes.

Before booting your kernel, at the UBoot command line try these two lines:

mw.l 0x44E10980 0x30

mw.l 0x44E10984 0x00

This should correctly turn on the UART 1 Rx and Tx lines.

Also.  I you want to turn on the fifos, the reference manual seems to gloss over part of how to do that.  Here is my code to

// config to fifo with interrupt but no DMA
    *UART_REG(LCR) = 0xBF;
    *UART_REG(EFR) = 0x10;
    *UART_REG(LCR) = 0x80;
    *UART_REG(SCR) = 0x01;
    *UART_REG(MCR) = 0x40;
    *UART_REG(TLR) = 0x11;
    *UART_REG(MCR) = 0x00;
    *UART_REG(FCR) = 0x07;

Jeffrey L. Hieb
Department of Engineering Fundamentals
University of Louisville
Louisville Kentucky 40292
(502) 852 0465
On 6/10/2016 3:05 PM, Julien Delange wrote:
Yep, I did this. The code boots correctly and the device is recognized. The serial is still not working, I assume this is a matter of code right now.



On Fri, Jun 10, 2016 at 2:57 PM, Tim Newsham <tim.newsham@gmail.com> wrote:
I think you need to add a line in kernel/src/plat/am335x/machine/hardware.c
for this.

On Fri, Jun 10, 2016 at 8:37 AM, Julien Delange <julien.delange@gmail.com> wrote:
I am using the second serial interface of the beaglebone black. According to the source code (in libsel4platsupport/plat_include/am335x/sel4platsupport/plat/hw/soc_AM335x.h), the address is 0x48022000). The following line is found in the source

#define SOC_UART_1_REGS                      (0x48022000)

So, in CAmkES, I configure the hardware component that represents the serial hardware component with the following attributes:

drv.mem_attributes       = "0x48022000:0x1000";

The application compiles fine. However, when launching the image on the target, I have the following issue. Any idea about how to solve this? Does anybody successfully used UART1 on the beaglebone black? Or have any idea/suggestion to investigate?



Creating object conn1_frame__timer_0 in slot 728, from untyped 29b...
 device frame, paddr = 0x48040000, size = 12 bits
Creating object conn2_frame__Cons_PingMe_0 in slot 729, from untyped 29b...
 device frame, paddr = 0x48022000, size = 12 bits

capDL-loader :: << Error: Failed to find device frame at paddr = 0x48022000
Ignoring call to sys_rt_sigprocmask
Ignoring call to sys_gettid
sys_tkill assuming self kill

Devel mailing list


Devel mailing list