[beagleboard] Re: PRU I/O max speed

2021-04-22 Thread Andrew P. Lentvorski
I would be stunned if the GPIOs don't have synchronizer flip-flops as they 
are sampling a signal asynchronous to the 200MHz clock.  That would account 
for 2 clocks.  You probably need one extra to clock data into R31.  And 
then one clock to read R31.

50MHz is a pretty smoking speed for SPI--you normally need to start 
thinking about series termination and some basic signal integrity.  You 
normally need the clock to capture to flop directly if you want things to 
work.

I suspect you probably need to use the 16-bit Parallel Capture Mode while 
feeding your clock out back as clock in.  You'll still probably be 4 clocks 
behind when the data hits R31, but the data will get *captured* by the 
PRU_CLOCKIN edge properly so the delay will now be deterministic if you 
are generating the 50MHz clock yourself.

On Thursday, February 25, 2021 at 12:15:18 PM UTC-8 rpau...@gmail.com wrote:

> With a sample size of one, r31 appears to be 4 instructions behind the 
> state of the pin.
>
> On Thursday, February 25, 2021 at 12:26:16 PM UTC-5 Paul Beam wrote:
>
>> I am, unfortunately, bit-banging SPI with the PRU, and I seem to be 
>> running into a speed limit < 50 MHz I desire.  I can certainly create a 
>> clock that fast, but reading data seems to be delayed.  I can see on the 
>> logic analyzer a "0" clearly being read as a '1" so there is either a delay 
>> in my clock output or a delay in my input or both.  I would like to think 
>> that r30 and r31 are tied directly to the outside world, but now I am 
>> thinking there is something in between that is either clocked or just has 
>> significant output delays.  Anyone else encountered this?  
>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/f88c700e-69c2-4ac4-bc64-d44a1715460dn%40googlegroups.com.


Re: [beagleboard] Re: remoteproc write to PRU over rpmsg device blocks even when set non-blocking

2020-12-08 Thread Andrew P. Lentvorski
Bumping this.  Again.

I'd like to *NOT* have to keep supporting the fix for this on the user side 
in the 5.X series when this really needs to get fixed on the kernel side.  
I've filed the bug reports.  They're just sitting.

In reality, the rpmsg system doesn't really have the hooks to even support 
the fix from the user side as I can't query the size and depths of the 
buffers.  This needs to get fixed in the PRU rpmsg kernel subsystem.

Thanks.

On Tuesday, June 30, 2020 at 3:43:01 AM UTC-7 Andrew P. Lentvorski wrote:

> So, we're still back at the original question of "Where do I file this bug 
> so that it gets tracked?"
>
> I see some recent work on rpmsg bugs at 
> https://github.com/beagleboard/linux/issues, so I'll file a bug there.  
> But, is there somewhere else I should file it?
>
> Thanks.
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/8c22cc26-7c2e-4fc9-a239-db3573efc1ean%40googlegroups.com.


[beagleboard] Re: PRU Memory Store Instruction with Autoincrement?

2020-10-19 Thread Andrew P. Lentvorski
Hmm, that's an interesting idea, Dimitar, to encode the increment in the 
immediate.  That's probably ... useful.

That mechanism would give me a 64-sample burst per register which could 
possibly get me to 1920 samples *if* the SBBO doesn't stall out anywhere.

I thought about the BeagleLogic, but it relies on the fact that every other 
cycle is NOP, so it can effectively run something simultaneously at 
half-speed in the interleaved time.

Looks like it's time for some experiments.  I'll report back if I see 
anything interesting.
On Sunday, October 18, 2020 at 12:11:33 PM UTC-7 din...@gmail.com wrote:

> Hi,
>
> Do you require continuous 200MHz sampling? That would be difficult I think.
>
> If you require bursts of 200MHz sampling, how long should those bursts be? 
> Even if you find autoincrement opcode, you would still need to add one jump 
> instruction to "loop".
>
> You can try hardcoding the "increment" into the constant offset field. And 
> load several registers with starting address of each 256-byte chunk of your 
> destination buffer. Example:
>
> init:
>  ldi r0, __buf_start
>  ldi r1, __buf_start+256
>  ldi r2, __buf_start+256*2
>   ...
> burst_store:
>  sbbo , r0, 0, 4
>  sbbo , r0, 4, 4
>  sbbo , r0, 8, 4
>  sbbo , r0, 12, 4
>  sbbo , r0, 16, 4
>  
>  sbbo , r0, 252, 4
>  sbbo , r1, 0, 4
>  sbbo , r0, 4, 4
>  ...
>
> I am not sure what are the buffering limits of PRU's posted writes. I 
> doubt if so many consecutive sbbo instructions would not stall.
>
> You should also examine BeagleLogic firmware's operation mode for 100MHz. 
> Perhaps you can modify it to take 200MHz bursts instead of continuous 
> 100MHz sampling. Difference with above single-PRU example is that you would 
> use PRU register banks for buffering, which would decouple sampling from 
> SBBO bus operations.
>
> Regards,
> Dimitar
>
> On Sunday, October 18, 2020 at 10:16:44 AM UTC+3 Andrew P. Lentvorski 
> wrote:
>
>> Hi, folks,
>>
>> I'm trying to dump R31 over and over into either RAM0 or Shared DRAM 
>> (Data RAM).
>>
>> So, basically it looks like I have to do:
>>
>> Store R31 to address in register
>> Increment address in register
>> (Lather rinse repeat)
>>
>> As that stands, that's a 100MHz sample of R31.  Is there anyway to do the 
>> autoincrement on the store?  That would double my sampling rate to 200MHz 
>> which would be the maximum possible.
>>
>> Alternatively, is there a different way to sample and store R31 
>> repeatedly to RAM0 or Shared DRAM?  I can't seem to see one, but there are 
>> so many permutation of Store Burst, mapping, the broadside transfer bus, 
>> and peripherals that I can quite easily be missing something that someone 
>> more experienced knows about.
>>
>> Thanks.
>>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/1799122c-27ec-4c2e-91f3-60b41c906b81n%40googlegroups.com.


[beagleboard] PRU Memory Store Instruction with Autoincrement?

2020-10-18 Thread Andrew P. Lentvorski
Hi, folks,

I'm trying to dump R31 over and over into either RAM0 or Shared DRAM (Data 
RAM).

So, basically it looks like I have to do:

Store R31 to address in register
Increment address in register
(Lather rinse repeat)

As that stands, that's a 100MHz sample of R31.  Is there anyway to do the 
autoincrement on the store?  That would double my sampling rate to 200MHz 
which would be the maximum possible.

Alternatively, is there a different way to sample and store R31 repeatedly 
to RAM0 or Shared DRAM?  I can't seem to see one, but there are so many 
permutation of Store Burst, mapping, the broadside transfer bus, and 
peripherals that I can quite easily be missing something that someone more 
experienced knows about.

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/f6018682-11cb-4370-a7ed-8cab21011d4dn%40googlegroups.com.


Re: [beagleboard] Re: remoteproc write to PRU over rpmsg device blocks even when set non-blocking

2020-06-30 Thread Andrew P. Lentvorski
So, we're still back at the original question of "Where do I file this bug 
so that it gets tracked?"

I see some recent work on rpmsg bugs at 
https://github.com/beagleboard/linux/issues, so I'll file a bug there.  
But, is there somewhere else I should file it?

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/9382c9f2-3ecf-4a2b-8869-10b2b2cf3e6eo%40googlegroups.com.


Re: [beagleboard] Re: remoteproc write to PRU over rpmsg device blocks even when set non-blocking

2020-06-23 Thread Andrew P. Lentvorski
Sure.  Right now, I just keep track of how many messages are in flight and 
I don't allow it to queue too many.

That's useful once you know what the bug is.  Fortunately, I hit this bug 
before I had two threads (one receiving USB and one receiving ethernet) 
which would have made hunting it down quite painful.  So, at least now I 
know that I *must* have a single thread acting as a gatekeeper on top of 
the rpmsg system.

If, however, you try to use a library on top of this bug that actually 
expects the O_NONBLOCK behavior to work, you will have a long debugging 
chain.

What *originally* tripped all of this was that I tried to use Rust and 
Tokio, which failed mysteriously.  After far too much fruitless debugging, 
I switched down to Rust and mio, which also failed weirdly.

So, I switched down to C, poll, and O_NONBLOCK, which then gave the 
incorrect blocking behavior and the ERESTARTSYS.  After *that*, I could 
actually pinpoint the incorrect behavior as belonging to pru_rpmsg and as 
being due to a full queue with incorrect blocking semantics.

Getting to that point, however, was neither pleasant nor straightforward.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/4f17a6a6-0c12-49de-81ec-25b072b6d9efo%40googlegroups.com.


Re: [beagleboard] Re: remoteproc write to PRU over rpmsg device blocks even when set non-blocking

2020-06-23 Thread Andrew P. Lentvorski
Urk, sorry I didn't quite get the implications of this statement:

The kfifo is used only on the receive path because of the asynchronous 
> callbacks. The 
> Tx-path is synchronous, the copy is attempted directly on the vring buffers
>

That means that kfifo doesn't exist on send so the only available solution 
appears to be calling rpmsg_trysend when in O_NONBLOCK mode.

That will hit the full vring buffers and should bounce back immediately 
with ENOMEM.

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/dcbb9c5a-229a-481f-8ea0-11a8735ac095o%40googlegroups.com.


Re: [beagleboard] Re: remoteproc write to PRU over rpmsg device blocks even when set non-blocking

2020-06-22 Thread Andrew P. Lentvorski
Hi, folks,

The issue is that requests cause the rpmsg channels to the PRU to fill.  
Which is actually fine, the PRU in this case is servicing slow requests and 
the rpmsg being full should exert backpressure.

The problem is that the rpmsg system *HANGS* several second before timing 
out and throws a fairly bizarre error.  Quoting my original message:

> Except that my overrun writes to "/dev/rpmsg_pru30" *still* block for 
several seconds (very bad) and then terminate with an Error 512 (huh?).

This is not good behavior from all manner of perspectives:

1) Why does the write time out *at all* when not O_NONBLOCK?  That's 
certainly not expected behavior.  There is no reason why the PRU might not 
take a couple seconds to service a request.  If that's a problem, you 
either set a timeout manually (usually only valid for file descriptors of 
sockets) or you put the file descriptor into non-blocking mode.  (It 
appears that this is the fault of the rpmsg driver which will time out 
after 15 seconds and then return ERESTARTSYS)

2) Why does the write hang *at all* when in O_NONBLOCK?  That's also not 
expected behavior.  If the queue is full, an attempt to write to it should 
return *IMMEDIATELY* with something like ENOMEM/EAGAIN.  (This appears to 
be the fault of the rpmsg_pru driver).

The file I was looking at is here:
https://github.com/beagleboard/linux/blob/4.19/drivers/rpmsg/rpmsg_pru.c

Two solutions seem to present themselves:

1) Use rpmsg_trysend when O_NONBLOCK is set  (see rpmsg_eptdev_write_iter 
in rpmsg_char.c line 243 for an example)

2) Check the queue for space and return immediately with ENOMEM.  (Saves 
the call to rpmsg_trysend and all its indirections).

3) Do both.  (It's possible that trysend covers other cases than just kfifo 
full--but the kfifo check may be a useful optimization and catch 99%+ or 
all the cases quickly).

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/dcb03907-1c54-4d83-8b42-6d396acbdd5co%40googlegroups.com.


[beagleboard] Re: Problems Reconfiguring GPIO's

2020-06-22 Thread Andrew P. Lentvorski
1) While I'm always grateful for your responses, TJF, you need to 
understand that your answers almost always come across a bit ... abrupt.  I 
presume it's a language thing as I couldn't possibly convey nuance in 
German.

2) You know the libpruio architecture cold, but none of your documentation 
explains it, at all.  So, the relationship between kernel module, system 
groups, PRU, and user mode is not at all clear to newcomers who actually 
try to look at your libpruio library.

3) The reliance on FreeBASIC is an absolute non-starter for a *LOT* of 
people.  While I'm sure you find it to be a superior tool, most people 
already find the BeagleBone forbidding enough.  Adding another unfamiliar 
tool to the mix is not something most people are willing to do.

Thanks.

On Sunday, June 21, 2020 at 11:22:48 PM UTC-7, TJF wrote:
>
>
>
> Am Montag, 22. Juni 2020 07:45:44 UTC+2 schrieb Andrew P. Lentvorski:
>>
>> Neither userspace nor PRU can change a pinmux.
>>
>
> Not correct. In a libpruio configuration all members of system-group 
> 'pruio' can pinmux from user space. That's why libpruio development is as 
> easy as Arduino development, but much more powerful.
>

*Because* you shunt the request through the custom kernel module. Telling 
people that they can pinmux from userspace simply confuses people further 
who are already probably plenty confused.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/9e313800-286e-41fa-b20f-cee927ab9d1co%40googlegroups.com.


[beagleboard] Re: remoteproc write to PRU over rpmsg device blocks even when set non-blocking

2020-06-22 Thread Andrew P. Lentvorski
Nobody knows where I should file this bug?

On Saturday, June 6, 2020 at 6:34:26 PM UTC-7, Andrew P. Lentvorski wrote:
>
> It appears that the problem is in rpmsg_pru.c.
>
> rpmsg_pru_read has the following code:
>
> if (kfifo_is_empty(>msg_fifo) &&
> (filp->f_flags & O_NONBLOCK))
> return -EAGAIN;
>
>
>
> rpmsg_pru_write presumably needs a similar piece of code with 
> kfifo_is_full() or it needs to look for O_NONBLOCK and then use 
> rpmsg_trysend instead of rpmsg_send.
>
> Unfortunately, I've got nowhere near the Linux kernel programming chops to 
> debate the implications of that.
>
> Presumably, I need to file a bug somewhere?
>
> Thanks.
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/2c824e98-015d-4471-b787-a8c27ceaae5fo%40googlegroups.com.


[beagleboard] Re: Problems Reconfiguring GPIO's

2020-06-21 Thread Andrew P. Lentvorski
On Thursday, June 18, 2020 at 10:11:20 AM UTC-7, Dennis Bieber wrote:
>
>
> OTOH -- if the author could get it to work on a 
> BB AI (which has two /pairs/ of PRUs, and currently has nothing for 
> run-time pin-muxing -- requiring device tree edits for any thing that is 
> not a default)... 
>

As I understand it, most of the pinmux issues on the AM57xx are due to a 
*chip* bug.  I don't think anybody can work around them.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/c2399ece-0e90-4c8b-9062-8522617e91e1o%40googlegroups.com.


[beagleboard] Re: Problems Reconfiguring GPIO's

2020-06-21 Thread Andrew P. Lentvorski


On Sunday, June 21, 2020 at 10:45:44 PM UTC-7, Andrew P. Lentvorski wrote:
>
>
> If you must have a pin that changes direction and you need to control it 
> from the PRU, you can use the digital I/O's on the IEP (industrial ethernet 
> peripheral).  I can confirm that this works.
>

I probably need to clarify.  I can confirm that you can *tri-state* an IEP 
output pin from the PRU.  I actually used an input and output pin wired 
together so I could dodge the whole question of changing *direction*. 

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/cabf9bf0-228e-458b-a1d6-dd9c44924ab1o%40googlegroups.com.


[beagleboard] Re: Problems Reconfiguring GPIO's

2020-06-21 Thread Andrew P. Lentvorski


On Thursday, June 18, 2020 at 1:50:03 PM UTC-7, Dennis Bieber wrote:
>
> I can only state then, that a quick perusal of the online 
> documentation 
> (in particular, the github readme) gives this one the impression that the 
> package provides a specific program running on a PRU which must be used, 
> and that a host application, via a library, talks to that PRU to perform 
> I/O. If setting the configuration and subsequent I/O performed without 
> involving a PRU, it is not readily apparent. The presence of that warning 
> about the PRU being able to access any memory reinforces this, as it 
> implies that a PRU could write to the pin-mux registers to change 
> configuration. 
>

Pinmuxing *must* be done from privileged mode (effectively: Linux 
kernel/kernel module only).  Neither userspace nor PRU can change a pinmux.

If you must have a pin that changes direction and you need to control it 
from the PRU, you can use the digital I/O's on the IEP (industrial ethernet 
peripheral).  I can confirm that this works.

See:
https://groups.google.com/forum/#!msg/beagleboard/AcQ3lY03UD0/glUL7Rc-CgAJ
https://e2e.ti.com/support/processors/f/791/t/445028


-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/f52441e9-53d3-435b-b1a6-d716c172e55fo%40googlegroups.com.


[beagleboard] Re: remoteproc write to PRU over rpmsg device blocks even when set non-blocking

2020-06-06 Thread Andrew P. Lentvorski
It appears that the problem is in rpmsg_pru.c.

rpmsg_pru_read has the following code:

if (kfifo_is_empty(>msg_fifo) &&
(filp->f_flags & O_NONBLOCK))
return -EAGAIN;



rpmsg_pru_write presumably needs a similar piece of code with 
kfifo_is_full() or it needs to look for O_NONBLOCK and then use 
rpmsg_trysend instead of rpmsg_send.

Unfortunately, I've got nowhere near the Linux kernel programming chops to 
debate the implications of that.

Presumably, I need to file a bug somewhere?

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/f6632a0f-8a9d-47e3-9326-27c8c3a55e3eo%40googlegroups.com.


[beagleboard] remoteproc write to PRU over rpmsg device blocks even when set non-blocking

2020-06-06 Thread Andrew P. Lentvorski
I was getting some strange bugs from some remoteproc stuff I was doing on a 
BBB, and eventually I tracked it down to the overunning the rpmsg system 
which can block for several seconds on a write.

Okay, fine.  No big deal.  This is what poll() was made for--flip 
"/dev/rpmsg_pru30" to O_NONBLOCK, set up POLLOUT, wait for a write event, 
write the data, and check the error.

Except that my overrun writes to "/dev/rpmsg_pru30" *still* block for 
several seconds (very bad) and then terminate with an Error 512 (huh?).

I can handle the error, but the big problem is the blocking.  That 
absolutely should not be allowed to happen.

What's going on?  And where do I file a bug about this?

Thanks.

# uname -a
Linux beaglebone 4.19.94-ti-r42 #1buster SMP PREEMPT Tue Mar 31 19:38:29 
UTC 2020 armv7l GNU/Linux


-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/43a93c6a-d432-4487-b100-46b8f1981bdeo%40googlegroups.com.


[beagleboard] Re: PocketBeagle is sometimes running very hot with only minimal CPU activity

2020-05-28 Thread Andrew P. Lentvorski
Agreed.  3G modems can pull a remarkable amount of power (up to 2A!) under 
certain circumstances.

That's going to tax the power systems of the PocketBeagle pretty heavily.  
You need to have something which you can use to turn on/off the power to 
the modem which bypasses the PocketBeagle power systems (ie. connects the 
USB supply directly to the modem supply without diodes or regulators in 
between).

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/91e9ffaf-8103-47d6-abb0-df3d27d99b33%40googlegroups.com.


[beagleboard] Re: Could PRU read this signals?

2020-05-28 Thread Andrew P. Lentvorski
You can certainly persist, but I'm going to point out the existence of 
chips like the AWR1843--"Single-chip 76-GHz to 81-GHz automotive radar 
sensor integrating DSP, MCU and radar accelerator":
https://www.ti.com/product/AWR1843

This is about $30, and does all the RF-y things while sending your ADC data 
straight to a DSP and Cortex R4F with extra Radar-y things to accelerate 
analysis.  This allows you to focus on analyzing the results instead of the 
guts of "implementing a radar".

Anyways, good luck.  Sounds like an interesting project.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/efefc883-c17e-4076-a285-aa3e5b285892%40googlegroups.com.


[beagleboard] Re: Could PRU read this signals?

2020-05-28 Thread Andrew P. Lentvorski
What are you actually trying to do?  That's a 50Mbit sustained transfer 
rate if bit time is 20ns.  100Mbit if 10ns.  And 4 channels.  That's 
200-400Mbps. You're moving a *TON* of data even at slower clock 
rates--there is no resource on the BBB that can keep that up very long.

This seems quite questionable on the BBB ... even moreso if your timing 
diagram is valid (which I suspect it is not).

First, given your diagram, the sampling point would have to be recovered.  
Note that the Clock, Data, and Frame are all coincident.  Normally the 
clock falls in the middle of the data window.  That's not easy to recover 
without a PLL.  I doubt the BBB has enough resolution to hit the data 
stable point on the data with any reliability at 50MHz.

Second, are you *actually* running at 50MHz?  Are you considering every 
*cross* as the frequency (high-to-low on a single line) or are you 
considering an individual signal rise-to-rise as the frequency.  Is that 
data changing every 20ns or every *10ns*?  If it's 10ns, it's probably not 
possible.

I would *STRONGLY* recommend that you use an FPGA.  Even an incredibly 
cheap FPGA would deserialize that with ease and then you could put it into 
a form in which you might be able abuse something like the RMII from the 
Ethernet peripheral to transfer it out.

But it's still a *LOT* of data.  You need something that can handle gigabit 
speeds if you keep this up even for a couple milliseconds.

Your best bet would be to use that FPGA to also decimate the data as well 
so that you're working with a reasonable amount of data.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/6e6c7cb6-c5f0-45e7-8c0b-3843f21083cb%40googlegroups.com.


[beagleboard] Event for pinmux completion?

2020-05-20 Thread Andrew P. Lentvorski
Is there some sort of event or flag for pinmux completion?

It seems that an overlay can take up to about 10-15 seconds after login is 
enabled before the pin muxes actually land in the expected state.

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/466e7792-1d23-41a0-9877-fe4eaaa42c2f%40googlegroups.com.


Re: [beagleboard] Should we put ID EEPROM's on capes anymore?

2020-05-20 Thread Andrew P. Lentvorski
Thanks, Robert.  Then I'll still install an EEPROM on my boards since there 
is still usefulness.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/49249204-da2c-4ac5-93db-eee322eba75d%40googlegroups.com.


[beagleboard] Should we put ID EEPROM's on capes anymore?

2020-05-19 Thread Andrew P. Lentvorski
Given that overlays have to be loaded at bootanyway, does it even make any 
sense to keep adding EEPROM for identification?

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/57082b9f-c8a9-4873-a6f8-ae9d7a435828%40googlegroups.com.


Re: [beagleboard] How to configure extra USB gadgets on BBB?

2020-05-07 Thread Andrew P. Lentvorski
Well, that documentation seems to be quite old and the shell script itself 
seems to indicate that I should be using a different path to a composite 
gadget (via libcomposite?), no?  It also doesn't seem like I need to hack 
the driver for things llike Ethernet anymore.  Finally, that link only 
mentions up to Windows 7, so I suspect it is quite old, at this point.

if [ "${kernel_major}" -lt "${compare_major}" ] ; then
use_old_g_multi
elif [ "${kernel_major}" -eq "${compare_major}" ] ; then
if [ "${kernel_minor}" -lt "${compare_minor}" ] ; then
use_old_g_multi
else
use_libcomposite
fi
else
use_libcomposite
fi




What am I missing?  I am, quite obviously, unfamilar with all the 
incantations around composite devices or I wouldn't be asking.

And my question about "Is there a way to do this without mangling the 
am335x_evm.sh script?" still stands.  It appears tha answer is "No.", but I 
have so little experience around this that I really don't trust my gut 
instincts to be useful here.

Thanks.

On Thursday, May 7, 2020 at 11:14:09 AM UTC-7, William Hermans wrote:
>
> https://www.kernel.org/doc/Documentation/usb/gadget_multi.rst  
>
> On Thu, May 7, 2020 at 1:48 AM Andrew P. Lentvorski  > wrote:
>
>> Is there a way to configure extra USB gadget endpoints in addition to the 
>> BBB default ones or do I just have to go in and edit the am335x_evm.sh 
>> script?
>>
>> Thanks.
>>
>> -- 
>> For more options, visit http://beagleboard.org/discuss
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "BeagleBoard" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to beagl...@googlegroups.com .
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/beagleboard/378ec705-3e00-4fe9-aed1-66ba32506684%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/beagleboard/378ec705-3e00-4fe9-aed1-66ba32506684%40googlegroups.com?utm_medium=email_source=footer>
>> .
>>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/8e896415-ddc8-47e2-812a-380b285374a9%40googlegroups.com.


[beagleboard] How to configure extra USB gadgets on BBB?

2020-05-07 Thread Andrew P. Lentvorski
Is there a way to configure extra USB gadget endpoints in addition to the 
BBB default ones or do I just have to go in and edit the am335x_evm.sh 
script?

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/378ec705-3e00-4fe9-aed1-66ba32506684%40googlegroups.com.


[beagleboard] Re: Full pinmux table for Pocketbeagle?

2020-03-09 Thread Andrew P. Lentvorski
And of course I figure it out the moment I ask the world ...

It's in Table 7 in the System Reference Manual.  You have to use the 
horizontal scrollbar at the bottom of the table to expose the other pinmux 
modes.
https://github.com/beagleboard/pocketbeagle/wiki/System-Reference-Manual#711-p1-header

Sorry to bother everybody.

On Monday, March 9, 2020 at 2:23:40 AM UTC-7, Andrew P. Lentvorski wrote:
>
> Is there a full pinmux table for the Pocketbeagle headers somewhere?
>
> I'm specifically looking to see if any of the PRU Ethernet Peripheral 
> digital I/O (pr1_edio_data_out/pr1_edio_data_in) pins are mapped to 
> anything.
>
> Thanks.
>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/5607fe81-13c2-44bf-9b4e-479c303b6785%40googlegroups.com.


[beagleboard] Full pinmux table for Pocketbeagle?

2020-03-09 Thread Andrew P. Lentvorski
Is there a full pinmux table for the Pocketbeagle headers somewhere?

I'm specifically looking to see if any of the PRU Ethernet Peripheral 
digital I/O (pr1_edio_data_out/pr1_edio_data_in) pins are mapped to 
anything.

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/1c682cd9-e580-4e91-a288-7e49ba898230%40googlegroups.com.


[beagleboard] How to get src and dst for pru_rpmsg_send?

2020-01-30 Thread Andrew P. Lentvorski
I seem to be missing something obvious: Where do I get the values for src 
and dst in the pru_rpmsg_send() function?

The TI examples do a pru_rpmsg_receive() first and then echo back to the 
same src and dst.  That seems ... odd.  What's the point of having a 
variable src and dst if they are effectively hardwired to a single 
communication channel?

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/6c621728-d703-403d-a9cd-727249c44d88%40googlegroups.com.


Re: [beagleboard] Can't get overlay to set pinmux for IEP

2020-01-24 Thread Andrew P. Lentvorski
Much appreciated, Robert.  I updated to the PRUCAPE file and tore out a 
bunch of stuff I didn't need and that seems to be setting the pinmux 
correctly.

Is there anything else in this file that can be removed?

Thanks.


// Code shamelessly copied from AM335X-PRU-RPROC-4-14-TI-PRUCAPE-00A0.dts

/dts-v1/;
/plugin/;

/ {
compatible = "ti,beaglebone", "ti,beaglebone-black", 
"ti,beaglebone-green";

// identification
part-number = "BB-PRUDAP";
version = "00A0";

/*
 * Helper to show loaded overlays under: 
/proc/device-tree/chosen/overlays/
 */
fragment@0 {
target-path="/";
__overlay__ {

chosen {
overlays {
BB-PRUDAP-00A0 = __TIMESTAMP__;
};
};
};
};

/*
 * Free up the pins used by the cape from the pinmux helpers.
 */
fragment@1 {
target = <>;
__overlay__ {
P9_18_pinmux { status = "disabled"; };/* P9_18: spi0_d1 */
P9_17_pinmux { status = "disabled"; };/* P9_17: spi0_cs0 */
};
};

fragment@2 {
target = <_pinmux>;
__overlay__ {
bb_prudap_pins: pinmux_bb_prudap_pins {
pinctrl-single,pins = <
0x158 0x2D/* P9_18: spi0_d1.i2c1_sda, SLEWCTRL_FAST 
| INPUT_EN | PULL_DISABLE | MODE5 (IEP-edio/digio data in 6) */
0x15c 0x2E/* P9_17: spi0_cs0.i2c1_scl, 
SLEWCTRL_FAST | INPUT_EN | PULL_DISABLE | MODE6 (IEP-edio/digio data out 7) 
*/
>;
};
};
};

fragment@3 {
target-path="/";
__overlay__ {

ocp {
#address-cells = <1>;
#size-cells = <1>;

pruss_soc_bus: pruss_soc_bus@4a326004 {
compatible = "ti,am3356-pruss-soc-bus";
reg = <0x4a326004 0x4>;
ti,hwmods = "pruss";
#address-cells = <1>;
#size-cells = <1>;
ranges = <0x0 0x4a30 0x8>;
status = "okay";

pruss: pruss@0 {
compatible = "ti,am3356-pruss";
reg = <0x0 0x8>;
interrupts = <20 21 22 23 24 25 26 27>;
interrupt-names = "host2", "host3", "host4",
  "host5", "host6", "host7",
  "host8", "host9";
#address-cells = <1>;
#size-cells = <1>;
ranges;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <_prudap_pins>;

pruss_iep: iep@2e000 {
compatible = "syscon";
reg = <0x2e000 0x31c>;
};
};
};
};
};
};
};



-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/ca27fc7b-0a17-40d1-8060-e639850ee5e5%40googlegroups.com.


[beagleboard] Can't get overlay to set pinmux for IEP

2020-01-23 Thread Andrew P. Lentvorski

Am I doing something wrong or are my expectations incorrect?

I created an overlay file BB-PRUDAP-00A0 to take over P9_17 and P9_18 and 
set them to the IEP.

I added it to uEnv.txt and apparently it loaded:

root@beaglebone:~/prudap/lkm/prudap_lkm# ls -al 
/proc/device-tree/chosen/overlays/
total 0
drwxr-xr-x 2 root root  0 Jan 24 07:11 .
drwxr-xr-x 3 root root  0 Jan 24 07:11 ..
-r--r--r-- 1 root root 25 Jan 24 07:11 AM335X-PRU-RPROC-4-14-TI-00A0
-r--r--r-- 1 root root 25 Jan 24 07:11 BB-ADC-00A0
-r--r--r-- 1 root root 25 Jan 24 07:11 BB-BONE-eMMC1-01-00A0
-r--r--r-- 1 root root 25 Jan 24 07:11 BB-PRUDAP-00A0
-r--r--r-- 1 root root  9 Jan 24 07:11 name


It also seems to have exclusive control over the pins:

root@beaglebone:~# config-pin P9_17 pwm
ERROR: open() for /sys/devices/platform/ocp/ocp:P9_17_pinmux/state failed, 
No such file or directory

However, when I check the actual pinmux values, I get:

[   77.897980] prudap: spi0_cs0 pinmux state: 0x37
[   77.897986] prudap: spi0_d1  pinmux state: 0x37

That's not what I expect.  I expected to see 0x2E and 0x2D like I requested 
in the overlay file.

What did I do wrong in the BB-PRUDAP-00A0.dts file.  Those values are not 
what I wanted, but I can override those values in a kernel module.  
However, I expected the pinmux to be already set up due to the overlay file.

Any help would be appreciated.

Thanks.


BB-PRUDAP-00A0.dts file:


/dts-v1/;
/plugin/;

#include 
#include 

/ {
compatible = "ti,beaglebone", "ti,beaglebone-black", 
"ti,beaglebone-green";

// identification
part-number = "BB-PRUDAP";
version = "00A0";

// resources this cape uses
exclusive-use =
"P9.17",// spi0_cs0
"P9.18",// spi0_d1

"pruss_iep";// hardware ip used

/*
 * Helper to show loaded overlays under: 
/proc/device-tree/chosen/overlays/
 */
fragment@0 {
target-path="/";
__overlay__ {

chosen {
overlays {
BB-PRUDAP-00A0 = __TIMESTAMP__;
};
};
};
};

/*
 * Free up the pins used by the cape from the pinmux helpers.
 */
fragment@1 {
target = <>;
__overlay__ {
P9_17_pinmux { status = "disabled"; };/* spi0_cs0 */
P9_18_pinmux { status = "disabled"; };/* spi0_d1  */
};
};

fragment@2 {
target = <_pinmux>;
__overlay__ {
bb_prudap_pins: pinmux_bb_prudap_pins {
pinctrl-single,pins = <
BONE_P9_17 0x2E/* spi0_cs0.i2c1_scl, SLEWCTRL_FAST 
| INPUT_EN | PULL_DISABLE | MODE6 (IEP-edio/digio data out 7) */
BONE_P9_18 0x2D/* spi0_d1.i2c1_sda, SLEWCTRL_FAST | 
INPUT_EN | PULL_DISABLE | MODE5 (IEP-edio/digio data in 6) */
>;
};
};
};

fragment@3 {
target = <_iep>;
__overlay__ {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <_prudap_pins>;
};
};
};





/boot/uEnv.txt for completeness:

root@beaglebone:~/prudap/lkm/prudap_lkm# cat /boot/uEnv.txt 
#Docs: http://elinux.org/Beagleboard:U-boot_partitioning_layout_2.0

uname_r=4.14.108-ti-r113
#uuid=
#dtb=

###U-Boot Overlays###
###Documentation: 
http://elinux.org/Beagleboard:BeagleBoneBlack_Debian#U-Boot_Overlays
###Master Enable
enable_uboot_overlays=1
###
###Overide capes with eeprom
#uboot_overlay_addr0=/lib/firmware/.dtbo
#uboot_overlay_addr1=/lib/firmware/.dtbo
#uboot_overlay_addr2=/lib/firmware/.dtbo
#uboot_overlay_addr3=/lib/firmware/.dtbo
###
###Additional custom capes
uboot_overlay_addr4=/lib/firmware/BB-PRUDAP-00A0.dtbo
#uboot_overlay_addr5=/lib/firmware/.dtbo
#uboot_overlay_addr6=/lib/firmware/.dtbo
#uboot_overlay_addr7=/lib/firmware/.dtbo
###
###Custom Cape
#dtb_overlay=/lib/firmware/.dtbo
###
###Disable auto loading of virtual capes (emmc/video/wireless/adc)
#disable_uboot_overlay_emmc=1
disable_uboot_overlay_video=1
disable_uboot_overlay_audio=1
#disable_uboot_overlay_wireless=1
#disable_uboot_overlay_adc=1
###
###PRUSS OPTIONS
###pru_rproc (4.4.x-ti kernel)
#uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-4-TI-00A0.dtbo
###pru_rproc (4.14.x-ti kernel)
uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-14-TI-00A0.dtbo
###pru_rproc (4.19.x-ti kernel)
#uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-19-TI-00A0.dtbo
###pru_uio (4.4.x-ti, 4.14.x-ti, 4.19.x-ti & mainline/bone kernel)
#uboot_overlay_pru=/lib/firmware/AM335X-PRU-UIO-00A0.dtbo
###
###Cape Universal Enable
enable_uboot_cape_universal=1
###
###Debug: disable uboot autoload of Cape
#disable_uboot_overlay_addr0=1
#disable_uboot_overlay_addr1=1
#disable_uboot_overlay_addr2=1
#disable_uboot_overlay_addr3=1
###
###U-Boot fdt tweaks... (6 = 384KB)
#uboot_fdt_buffer=0x6
###U-Boot Overlays###

cmdline=coherent_pool=1M net.ifnames=0 rng_core.default_quality=100 quiet

#In the event of edid real failures, 

[beagleboard] Re: Set pinmux to PRU Industrial Ethernet Peripheral (IEP) from Linux

2020-01-20 Thread Andrew P. Lentvorski

Thank you.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/357b76fe-3805-4ff4-b08b-91ddcf05862f%40googlegroups.com.


[beagleboard] Re: Set pinmux to PRU Industrial Ethernet Peripheral (IEP) from Linux

2020-01-19 Thread Andrew P. Lentvorski
Okay, then I'm just missing something obvious.  What is a GPIO-SS?  What 
unit and what register address?  I see no mention of "GPIO-SS" anywhere in 
the AM335x Technical Reference Manual.

Normally, I associate SS with "slave select" which means SPI.  I see that 
you *can* turn around the CS lines on the McSPI subsystem, but you have to 
switch from Master to Slave Mode.  That doesn't seem like what you are 
suggesting.

On Sunday, January 19, 2020 at 12:38:28 AM UTC-8, TJF wrote:
>
>
> It was your idea to use the PRU-IEP module. I recommended to use a pin on 
> a GPIO-SS. 
>

I went hunting for GPIO-SS--I didn't find anything.  I went hunting for OE 
(output enable) in the PRU docs.  I found one on the digio.  I also found 
that TI used the IEP to implement the 1-Wire interface on the PRUCAPE.  You 
were also implementing bidirectionality on a 1-Wire interface.  I drew an, 
incorrect in retrospect, inference that people were using the IEP digio for 
bidirectional and tri-state functions.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/a9624428-be6c-4558-a0b3-53acff9aee61%40googlegroups.com.


[beagleboard] Re: Set pinmux to PRU Industrial Ethernet Peripheral (IEP) from Linux

2020-01-19 Thread Andrew P. Lentvorski
Well, sort of, except you omit the *EXTREMELY* important point that you 
install a custom kernel module in order to expose the clock activation and 
pinmux system to all users.

Okay, yes, if I build a kernel module I now have full access to all 
registers on the system with no restrictions.  That's sort of like swatting 
a fly with an H-Bomb, but it will work.

This means that config-pin has a fairly significant bug in not being able 
to route the IEP pins.  Has that bug ever been filed anywhere?

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/e4237fb2-126c-44ab-b7f6-f72071a1fd92%40googlegroups.com.


[beagleboard] Re: Set pinmux to PRU Industrial Ethernet Peripheral (IEP) from Linux

2020-01-18 Thread Andrew P. Lentvorski
As far as I can tell, the old mmap() method fails.  What's my next step?

#include 

#include 
#include 

#include 
#include 
#include 
#include  

#include 


#define CONTROL_MODULE_START  ((uint32_t)0x44E1)
#define CONTROL_MODULE_END((uint32_t)0x44E11FFF)
#define CONTROL_MODULE_LENGTH (CONTROL_MODULE_END - CONTROL_MODULE_START + 1
)


// Official pin name for pr1_edio_data_out0 is SPI0_D1 in Mode 6
// Official pin name for pr1_edio_data_out1 is SPI0_CS0 in Mode 6

#define CONF_SPI0_D1_OFFSET  0x958
#define CONF_SPI0_CS0_OFFSET 0x95C

#define MODE_1 0x1
#define MODE_4 0x4
#define MODE_6 0x6

int main(int argc, char *argv[])
{
uint32_t volatile * control_mode_mapped_base = NULL;

int fd = open("/dev/mem", O_RDWR);
printf("/dev/mem opened: %d\n", fd);
printf("Mapping %X - %X (size: %X)\n", CONTROL_MODULE_START, 
CONTROL_MODULE_END, CONTROL_MODULE_LENGTH);

uint32_t volatile * const control_module_mapped_base = mmap(NULL, 
CONTROL_MODULE_LENGTH, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 
CONTROL_MODULE_START);
printf("Mapped base to: %p\n", control_module_mapped_base);
assert(control_mode_mapped_base != ((uint32_t volatile * const)(-1)));

uint32_t volatile * const u32_control_P9_17 = (control_module_mapped_base 
+ (CONF_SPI0_CS0_OFFSET/4));  // / 4 is due to the way C handles a pointer 
to uint32_t
uint32_t volatile * const u32_control_P9_18 = (control_module_mapped_base 
+ (CONF_SPI0_D1_OFFSET/4));

*u32_control_P9_17 = MODE_1; // Fails to write
*u32_control_P9_18 = MODE_1;

printf("Mode for P9_17: %X\n", (*u32_control_P9_17 & 0x7));  // Read is 
fine--config-pin will cause this to change apropriately
printf("Mode for P9_18: %X\n", (*u32_control_P9_18 & 0x7));

assert((*u32_control_P9_17 & 0x7) == MODE_1);
assert((*u32_control_P9_18 & 0x7) == MODE_1);

munmap((void *)control_mode_mapped_base, CONTROL_MODULE_LENGTH);

close(fd);
}




-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/ed5d010b-fb1d-4809-a919-fa91513a7abf%40googlegroups.com.


[beagleboard] Set pinmux to PRU Industrial Ethernet Peripheral (IEP) from Linux

2020-01-17 Thread Andrew P. Lentvorski
Is there a way to set the pinmux for a pin to the PRU Industrial Ethernet 
Peripheral from Linux (for example: set pin P9_17 to pr1_edio_data_out0)?

If not, what would be the recommended way to do so?

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/bc2f4d3b-3153-4dae-84bd-8524ddf25c70%40googlegroups.com.


[beagleboard] Re: Make PRU-controlled pin change direction or go tri-state?

2020-01-17 Thread Andrew P. Lentvorski
On Thursday, January 16, 2020 at 8:39:20 AM UTC-8, TJF wrote:
>
>
> In order to change direction for a pin on a GPIO-SS, it needs a write 
> access to its OE register. The PRU can do that.
>

Let me see if I have this straight, I need access to an output enable from 
the PRU.  The only output enable I can see involves the Industrial Ethernet 
Peripheral.

So, by setting the PINMUX up front to the IEP, I can route my data through 
the IEP DIGIO in order to gain the tri-state capability I want?

That ... might actually be what I need.

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/350f5a11-afb8-4070-9e17-b0f454f86178%40googlegroups.com.


Re: [beagleboard] Make PRU-controlled pin change direction or go tri-state?

2020-01-16 Thread Andrew P. Lentvorski


On Thursday, January 16, 2020 at 9:58:39 AM UTC-8, Jason Kridner wrote:
>
>
>
> On Thu, Jan 16, 2020 at 3:39 AM Andrew P. Lentvorski  > wrote:
> >
> > I've got to be missing something obvious, but I even after several 
> rounds of RTFM, I can't seem to figure out how to get the PRU to change the 
> direction of a pin or, at the very least, to let it go to a tri-state value.
> >
> > I would go out over the L3/L4 (although that kinda smashes the whole 
> "real-time" thing), but won't that bump into the fact that the processor 
> needs to be in supervisor mode?
>
> I see you got some other answers, but it might help you to qualify if you 
> are using a chip-level GPIO or PRU-level GPIO.
>
> As mentioned, you don't need a supervisor mode to get to the L3 bus needed 
> to configure the GPIO or pinmux. You do need to clear the STANDBY_INIT bit 
> in SYSCFG. Then, the PRU can poke all the SoC registers that the ARM can. 
> Below is an example that clears this bit, but doesn't need to do so, 
> because the PRU GPIO bits are INSIDE the PRUSS, so I'll likely remove those 
> lines from this example in the future.
>
>

I guess I'm still missing something because the following program doesn't 
work.  When I try to write to *u32_control_P9_27, nothing changes.  I *CAN* 
however read from it and config-pin can change it externally just fine.  
So, I got the actual *pointer address* as well as various clocks and 
enables correct since I can read it properly.

What did I get wrong?


#include 
#include 
#include "resource_table_empty.h"

volatile register uint32_t __R30;   // 32 output gpios
volatile register uint32_t __R31;   // 32 input gpios

#define CONTROL_MODULE_START ((uint32_t)0x44E1)
#define CONF_MCASP0_FSR_OFFSET 0x9A4
uint32_t volatile * const u32_control_P9_27 = (uint32_t volatile * 
const)(CONTROL_MODULE_START 
+ CONF_MCASP0_FSR_OFFSET);

#define PINMUX_PRU_OUT 0x5
#define PINMUX_PRU_IN  0x6

#define DELAY_CYCLES (5000/2)
void main(void) {
uint32_t const led = 0x0028; // Use pru0_pru_r30_5 and 
pru0_pru_r32_3 as an output

// You can now monitor P9_28 frequency as reflecting state of P9_27 
pinmux

CT_CFG.SYSCFG_bit.STANDBY_INIT = 0;

unsigned int ui = 0;
unsigned int ui_fast = 0;

while (1) {
*u32_control_P9_27 = PINMUX_PRU_IN;  // No effect on frequency 
while config-pin causes expected frequency shifts

++ui;

if (((*u32_control_P9_27) & 0x07) == PINMUX_PRU_OUT) {  // This 
verifies that I actually got the correct address of the pinmux
ui_fast = 1;
} else {
ui_fast = 0;
}

__R30 = led;
__delay_cycles(DELAY_CYCLES);
if (ui_fast != 1) {
__delay_cycles(DELAY_CYCLES);
}

__R30 = 0;
__delay_cycles(DELAY_CYCLES);
if (ui_fast != 1) {
__delay_cycles(DELAY_CYCLES);
}
}

__halt();
}




-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/437cd2db-6711-4dbe-ba19-0a781d0f31bd%40googlegroups.com.


[beagleboard] Make PRU-controlled pin change direction or go tri-state?

2020-01-16 Thread Andrew P. Lentvorski
I've got to be missing something obvious, but I even after several rounds 
of RTFM, I can't seem to figure out how to get the PRU to change the 
direction of a pin or, at the very least, to let it go to a tri-state value.

I would go out over the L3/L4 (although that kinda smashes the whole 
"real-time" thing), but won't that bump into the fact that the processor 
needs to be in supervisor mode?

Any help would be appreciated.

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/16640740-240b-4e94-950d-f4bbe369fb76%40googlegroups.com.


[beagleboard] Re: BBAI USB-C only enumerates as high speed device with cable in one orientation

2019-11-10 Thread Andrew P. Lentvorski
I haven't checked the Bill of Materials, but if U22 (the TUSB322IRWBR USB-C 
control chip) is populated along with R533 and R534, then the board is out 
of spec for USB-C on the CC lines.

On Thursday, November 7, 2019 at 7:15:01 AM UTC-8, nick.g...@gmail.com 
wrote:
>
>
> Hello,
>
> I have noticed that my BBAI Rev A1, when connected to a PC, will enumerate 
> as a high-speed USB device with the USB-C connector in one orientation, and 
> a Super-Speed device with the connector oriented in the other direction 
> (simply flipped upside down). I have reproduced this across several 
> software revisions including the production emmc image: 
> http://debian.beagleboard.org/images/am57xx-eMMC-flasher-debian-9.9-lxqt-armhf-2019-08-03-4gb.img.xz
>
> I checked the 
> https://github.com/beagleboard/beaglebone-ai/wiki/System-Reference-Manual#board-changes
>  
> page and did not see any changes related to USB in any of the newer 
> revisions. I was wondering if there are others who also have experienced 
> this issue, or if it could be isolated to my specific board. I have 
> reproduced the issue with several different USB-C cables including a USB 
> A->USB-C and USB-C -> USB-C cable.
>
> First orientation:
>
>> Nov  6 13:54:36 lnx-nickg kernel: [606956.216954] usb 1-5: new high-speed 
>> USB device number 48 using xhci_hcd
>> Nov  6 13:54:36 lnx-nickg kernel: [606956.346011] usb 1-5: New USB device 
>> found, idVendor=1d6b, idProduct=0104
>> Nov  6 13:54:36 lnx-nickg kernel: [606956.346013] usb 1-5: New USB device 
>> strings: Mfr=1, Product=2, SerialNumber=3
>> Nov  6 13:54:36 lnx-nickg kernel: [606956.346015] usb 1-5: Product: 
>> BeagleBone
>> Nov  6 13:54:36 lnx-nickg kernel: [606956.346017] usb 1-5: Manufacturer: 
>> BeagleBoard.org
>> Nov  6 13:54:36 lnx-nickg kernel: [606956.346018] usb 1-5: SerialNumber: 
>> 1234BBBK5678 
>
> Nov  6 13:54:36 lnx-nickg kernel: [606956.347593] usb-storage 1-5:1.2: USB 
>> Mass Storage device detected 
>
> ... 
>>
>
> Second orientation:
>
>> Nov  6 14:04:53 lnx-nickg kernel: [607573.545068] usb 2-5: new SuperSpeed 
>> USB device number 32 using xhci_hcd
>> Nov  6 14:04:53 lnx-nickg kernel: [607573.562236] usb 2-5: New USB device 
>> found, idVendor=1d6b, idProduct=0104
>> Nov  6 14:04:53 lnx-nickg kernel: [607573.562246] usb 2-5: New USB device 
>> strings: Mfr=1, Product=2, SerialNumber=3
>> Nov  6 14:04:53 lnx-nickg kernel: [607573.562252] usb 2-5: Product: 
>> BeagleBone
>> Nov  6 14:04:53 lnx-nickg kernel: [607573.562258] usb 2-5: Manufacturer: 
>> BeagleBoard.org
>> Nov  6 14:04:53 lnx-nickg kernel: [607573.562263] usb 2-5: SerialNumber: 
>> 1234BBBK5678
>> Nov  6 14:04:53 lnx-nickg kernel: [607573.567404] usb-storage 2-5:1.2: 
>> USB Mass Storage device detected
>>
> ...
>>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/08088773-4022-4342-86f7-ee25a3537101%40googlegroups.com.


[beagleboard] Re: I2C Read with length in the first byte of the transaction

2018-02-15 Thread Andrew P. Lentvorski
Well, if the SMBus Specification Version 2.0 Section "5.5.7 Block 
write/read" is goofy then, um, okay ...

However, since this appears to be a standard part of SMBus, now I really do 
wish to ask "How do I do this with the Linux I2C drivers?"

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/a7b322ee-3e44-45b7-a8cd-1477824d6473%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] Re: I2C Read with length in the first byte of the transaction

2018-02-12 Thread Andrew P. Lentvorski
Looking at the driver 
at: 
https://github.com/torvalds/linux/blob/master/drivers/i2c/busses/i2c-davinci.c

It looks like i2c_davinci_isr() only terminates a read via terminate_read() 
which doesn't seem to have an exit path for completion without STOP.

It would be nice if somebody with more experience than me could verify 
this, as I'm going to have to go to a bit-banged driver otherwise.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/ff83fdcf-4a2e-4816-a0ae-fd9779ef61a7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [beagleboard] I2C Read with length in the first byte of the transaction

2018-02-12 Thread Andrew P. Lentvorski
Erm, unless you mean board.  I'm using a Beaglebone Black Rev C running 
debian.

uname -a

Linux beaglebone 4.9.36-ti-r46 #1 SMP PREEMPT Tue Jul 11 21:05:08 UTC 2017 
armv7l GNU/Linux

On Monday, February 12, 2018 at 5:07:37 PM UTC-8, Wulf Man wrote:
>
> what part
>
> On 2/12/2018 6:03 PM, Andrew P. Lentvorski wrote:
>
> I'm trying to communicate with an I2C chip which returns the length of the 
> bytes to be read in the first byte of the transaction.  This is fairly 
> straightforward on most primitive microcontrollers. 
>
> But for the life of me, I cannot figure out how to do this on Linux.  A 
> "read" always wants to put a stop bit after the transaction.  I see 
> "I2C_M_NOSTART" which is probably what I need for the data bytes, but I 
> don't see a corresponding I2C_M_NOSTOP which is what I need for the first 
> byte.
>
> Any help would be appreciated.  Thanks.
>
> What I need is this transaction sequence:
>
>  (PROBLEM HERE--master processes length 
> byte)
> -- 
> For more options, visit http://beagleboard.org/discuss
> --- 
> You received this message because you are subscribed to the Google Groups 
> "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to beagleboard...@googlegroups.com .
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/beagleboard/2e7ae77f-21b3-46c2-9aff-4a32201bed55%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/beagleboard/2e7ae77f-21b3-46c2-9aff-4a32201bed55%40googlegroups.com?utm_medium=email_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/b5e27af4-8a2d-41f5-a2aa-732cdc496e21%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [beagleboard] I2C Read with length in the first byte of the transaction

2018-02-12 Thread Andrew P. Lentvorski
Under NDA.  So, not in linux database.

On Monday, February 12, 2018 at 5:07:37 PM UTC-8, Wulf Man wrote:
>
> what part
>
> On 2/12/2018 6:03 PM, Andrew P. Lentvorski wrote:
>
> I'm trying to communicate with an I2C chip which returns the length of the 
> bytes to be read in the first byte of the transaction.  This is fairly 
> straightforward on most primitive microcontrollers. 
>
> But for the life of me, I cannot figure out how to do this on Linux.  A 
> "read" always wants to put a stop bit after the transaction.  I see 
> "I2C_M_NOSTART" which is probably what I need for the data bytes, but I 
> don't see a corresponding I2C_M_NOSTOP which is what I need for the first 
> byte.
>
> Any help would be appreciated.  Thanks.
>
> What I need is this transaction sequence:
>
>  (PROBLEM HERE--master processes length 
> byte)
> -- 
> For more options, visit http://beagleboard.org/discuss
> --- 
> You received this message because you are subscribed to the Google Groups 
> "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to beagleboard...@googlegroups.com .
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/beagleboard/2e7ae77f-21b3-46c2-9aff-4a32201bed55%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/beagleboard/2e7ae77f-21b3-46c2-9aff-4a32201bed55%40googlegroups.com?utm_medium=email_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/d81b79b7-69eb-4243-9e95-1c0aa974db54%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] I2C Read with length in the first byte of the transaction

2018-02-12 Thread Andrew P. Lentvorski
I'm trying to communicate with an I2C chip which returns the length of the 
bytes to be read in the first byte of the transaction.  This is fairly 
straightforward on most primitive microcontrollers.

But for the life of me, I cannot figure out how to do this on Linux.  A 
"read" always wants to put a stop bit after the transaction.  I see 
"I2C_M_NOSTART" which is probably what I need for the data bytes, but I 
don't see a corresponding I2C_M_NOSTOP which is what I need for the first 
byte.

Any help would be appreciated.  Thanks.

What I need is this transaction sequence:

 (PROBLEM HERE--master processes length 
byte)

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/2e7ae77f-21b3-46c2-9aff-4a32201bed55%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [beagleboard] Trouble building a configfs for HID device on BBBW

2018-01-16 Thread Andrew P. Lentvorski
Did you ever get an answer for this.  I followed the directions at: 
https://wiki.tizen.org/USB/Linux_USB_Layers/Configfs_Composite_Gadget/Usage_eq._to_g_hid.ko

And am now bumping into the same problem:
root@beaglebone:/home/debian/cfg/usb_gadget/g1# pwd

 

/home/debian/cfg/usb_gadget/g1 

root@beaglebone:/home/debian/cfg/usb_gadget/g1# ls 

bcdDevice bcdUSB bDeviceClass bDeviceProtocol bDeviceSubClass 
bMaxPacketSize0 configs functions idProduct idVendor os_desc strings UDC 

root@beaglebone:/home/debian/cfg/usb_gadget/g1# ls -al /sys/class/udc 

total 0 

drwxr-xr-x 2 root root 0 Jan 16 09:30 . 

drwxr-xr-x 58 root root 0 Jan 16 09:30 .. 

lrwxrwxrwx 1 root root 0 Jan 16 09:29 musb-hdrc.0.auto -> ../../devices/
platform/ocp/4740.usb/47401400.usb/musb-hdrc.0.auto/udc/musb-hdrc.0.auto 

root@beaglebone:/home/debian/cfg/usb_gadget/g1# echo musb-hdrc.0.auto > UDC 

-su: echo: write error: Device or resource busy 

root@beaglebone:/home/debian/cfg/usb_gadget/g1# echo musb-hdrc.0 > UDC 

-su: echo: write error: No such device 

root@beaglebone:/home/debian/cfg/usb_gadget/g1# uname -r 

4.4.91-ti-r133



-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/8336d40f-ba83-4ce4-8de7-a8f6c14926bd%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] Re: BB-BONE-AUDI cape fails to load

2017-07-02 Thread Andrew P. Lentvorski
Thanks to zmatt on the IRC channel this got resolved.

The problem is that the am335x-boneblack-overlay.dtb does not define the 
symbol "clk_mcasp0".

So, I had to use the am335x-boneblack-audio.dtb overlay instead.


On Monday, June 26, 2017 at 1:31:27 AM UTC-7, Andrew P. Lentvorski wrote:
>
>
> I'm trying to get my own audio cape to load so I thought I would start by 
> loading the built-in audio cape configuration and then copy that to make my 
> own.  However, I can't seem to beat the cape manager into submission.  I 
> can load the BB-UART1-00A0 overlay, but I can't load the 
> BB-BONE-AUDI-02-00A0:
>
> root@beaglebone:/sys/devices/platform# echo BB-UART1 
> >/sys/devices/platform/bone_capemgr/slots
> root@beaglebone:/sys/devices/platform# echo BB-BONE-AUDI 
> >/sys/devices/platform/bone_capemgr/slots
> -bash: echo: write error: No such file or directory
> root@beaglebone:/sys/devices/platform# echo BB-BONE-AUDI-02 
> >/sys/devices/platform/bone_capemgr/slots
> -bash: echo: write error: Invalid argument
> root@beaglebone:/sys/devices/platform# cat 
> /sys/devices/platform/bone_capemgr/slots
>  0: PF  -1 
>  1: PF  -1 
>  2: PF  -1 
>  3: PF  -1 
> 14: P-O-L-   0 Override Board Name,00A0,Override Manuf,BB-UART1
>
>
>
> Any suggestions as to what I'm doing wrong?
>
> Thanks.
>
> root@beaglebone:/sys/devices/platform# uname -a
> Linux beaglebone 4.4.54-ti-r93 #1 SMP Fri Mar 17 13:08:22 UTC 2017 armv7l 
> GNU/Linux
>
>
>
>
>
>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/4f9aebfe-74d1-49cf-9982-7512c9bd2bae%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] BB-BONE-AUDI cape fails to load

2017-06-26 Thread Andrew P. Lentvorski

I'm trying to get my own audio cape to load so I thought I would start by 
loading the built-in audio cape configuration and then copy that to make my 
own.  However, I can't seem to beat the cape manager into submission.  I 
can load the BB-UART1-00A0 overlay, but I can't load the 
BB-BONE-AUDI-02-00A0:

root@beaglebone:/sys/devices/platform# echo BB-UART1 
>/sys/devices/platform/bone_capemgr/slots
root@beaglebone:/sys/devices/platform# echo BB-BONE-AUDI 
>/sys/devices/platform/bone_capemgr/slots
-bash: echo: write error: No such file or directory
root@beaglebone:/sys/devices/platform# echo BB-BONE-AUDI-02 
>/sys/devices/platform/bone_capemgr/slots
-bash: echo: write error: Invalid argument
root@beaglebone:/sys/devices/platform# cat 
/sys/devices/platform/bone_capemgr/slots
 0: PF  -1 
 1: PF  -1 
 2: PF  -1 
 3: PF  -1 
14: P-O-L-   0 Override Board Name,00A0,Override Manuf,BB-UART1



Any suggestions as to what I'm doing wrong?

Thanks.

root@beaglebone:/sys/devices/platform# uname -a
Linux beaglebone 4.4.54-ti-r93 #1 SMP Fri Mar 17 13:08:22 UTC 2017 armv7l 
GNU/Linux






-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/64517afa-fe48-49cd-9710-fa4f9015b442%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [beagleboard] Applying patches before build_kernel.sh?

2017-06-21 Thread Andrew P. Lentvorski
Thank you, Robert.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/ca7c77f8-54a7-4d01-8e8d-595a8d1cc3bd%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] Applying patches before build_kernel.sh?

2017-06-20 Thread Andrew P. Lentvorski
If I'm using Robert C. Nelson's build scripts: (ie: git clone 
https://github.com/RobertCNelson/ti-linux-kernel-dev.git, git checkout 
tags/4.4.54-ti-r93 and then build_kernel.sh), what is the appropriate 
file/place/repository to inject patches to be picked up.

Do I modify the repo in /ignore?  Do I patch the one in KERNEL?  Do I 
modify local_patch in patch.sh?

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/e906c381-845b-4a76-8510-83d4fb026864%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] ADAU1372 Audio Codec Cape on Debian Jessie (4.4.54)

2017-06-19 Thread Andrew P. Lentvorski
I've build a codec cape based around the Analog Devices ADAU1372.

At this point, I can communicate with the device over I2C using i2cset/get 
and I can see audio data on the wire using my oscilloscope when I manually 
configure it.  i2cdetect happily sees both my (as yet unconfigured) EEPROM 
at 0x50 and my codec at 0x3d.

Analog Devices helpfully provides a Linux driver which I'm struggling to 
get built, but I suspect that's merely a matter of me banging my head off 
of it over enough time as it's sort of a relatively generic Linux task.

What I don't have a clear idea about is how to tell Linux what pins are 
connected to what and how/when to connect to the driver module.  I have dug 
through some of the device tree stuff, but a lot of it is for the 3.X 
series Angstrom kernels and doesn't seem to work correctly for the 4.X 
Debian kernels.

Can someone point me to some up-to-date documentation or resources that I 
can dig through about this?

Thanks.

(Reposted and deleted original to fix horrific formatting ... sorry)


root@beaglebone:~# uname -a
Linux beaglebone 4.4.54-ti-r93 #1 SMP Fri Mar 17 13:08:22 UTC 2017 armv7l 
GNU/Linux

Linux driver:
https://wiki.analog.com/resources/tools-software/linux-drivers/sound/adau1372

Chip datasheet:
http://www.analog.com/en/products/audio-video/audio-codecs/adau1372.html


root@beaglebone:~# i2cdetect -y -r 2

 

 0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f 

00:  -- -- -- -- -- -- -- -- -- -- -- -- --  

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  

30: -- -- -- -- -- -- -- -- -- -- -- -- -- 3d -- --  

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  

50: 50 -- -- -- UU UU UU UU 58 -- -- -- -- -- -- --  

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  

70: -- -- -- -- -- -- -- --  

root@beaglebone:~# 


-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/15de3b6b-303e-441f-a10f-640a6d38c796%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] ADAU1372 Audio Codec Cape on Debian Jessie (4.4.54)

2017-06-19 Thread Andrew P. Lentvorski
 

I've build a codec cape based around the Analog Devices ADAU1372.


At this point, I can communicate with the device over I2C using i2cset/get 
and I can see audio data on the wire using my oscilloscope when I manually 
configure it.  i2cdetect happily sees both my (as yet unconfigured) EEPROM 
at 0x50 and my codec at 0x3d.


Analog Devices helpfully provides a Linux driver which I'm struggling to 
get built, but I suspect that's merely a matter of me banging my head off 
of it over enough time as it's sort of a relatively generic Linux task.


What I don't have a clear idea about is how to tell Linux what pins are 
connected to what and how/when to connect to the driver module.  I have dug 
through some of the device tree stuff, but a lot of it is for the 3.X 
series Angstrom kernels and doesn't seem to work correctly for the 4.X 
Debian kernels.


Can someone point me to some up-to-date documentation or resources that I 
can dig through about this?


Thanks.



root@beaglebone:~# uname -a

Linux beaglebone 4.4.54-ti-r93 #1 SMP Fri Mar 17 13:08:22 UTC 2017 armv7l 
GNU/Linux


Linux driver:

https://wiki.analog.com/resources/tools-software/linux-drivers/sound/adau1372


Chip datasheet:

http://www.analog.com/en/products/audio-video/audio-codecs/adau1372.html





root@beaglebone:~# i2cdetect -y -r 2

 0 1 2 3 4 5 6 7 8 9 a b c d e f

00: -- -- -- -- -- -- -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

30: -- -- -- -- -- -- -- -- -- -- -- -- -- 3d -- -- 

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

50: 50 -- -- -- UU UU UU UU 58 -- -- -- -- -- -- -- 

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

 

70: -- -- -- -- -- -- -- -- 



-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/ad454599-4c75-4871-97fe-dae86d4815d4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] Re: How write or use Can Bus driver on BBB with Ubuntu?

2015-08-31 Thread Andrew P. Lentvorski
In the comments from the linked article you have this message:

which cape is this tutorial for? I also have several TowerTech Can capes. 
> http://circuitco.com/support/index.php?title=TT3201_CAN_Cape
>

To which the original author responds:

I did not use any cape when making this tutorial, I simply hooked up a CAN 
> transceiver to the relevant pins. However, I see now reason why it 
> shouldn't work with the cape, it may simply be a device tree conflict.
>

Note the need for a CAN transceiver. If you don't get this, you can't even 
start.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] Re: How write or use Can Bus driver on BBB with Ubuntu?

2015-08-31 Thread Andrew P. Lentvorski
Huh?  CANOpen/SocketCAN SDO transactions can have almost indefinite extent, 
have toggle bits that persist across frames, and CRC's that span the whole 
transaction.

If you can eyeball that, you are way smarter than me.

I think you may only be considering PDO transactions which are only ever 8 
bytes max.

On Sunday, August 30, 2015 at 8:37:14 AM UTC-7, William Hermans wrote:
>
> *Side note: wireshark is capable of decoding CAN packets and even the 
>> SocketCAN protocol!*
>
>
> This is something I guess I'll never get. Whats the point ? socketcan 
> frames only have up to 8 byte data payloads . . .candump, and a good eye 
> for your data is all that is needed. 
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] Offtopic: Sort threads by most recent post?

2015-08-30 Thread Andrew P. Lentvorski
I feel really stupid asking this on the forum, but I can't seem to find the 
setting that would sort the threads by the latest post.  Is this a group 
administrator setting rather than an individual setting?

A quick Google search for variants on google groups sort thread by recent 
post -gmail doesn't cough up anything useful.

Sorry to add this noise to the group.

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] Re: How write or use Can Bus driver on BBB with Ubuntu?

2015-08-30 Thread Andrew P. Lentvorski
You don't get a choice.  CAN *requires* a transceiver to convert from the 
TX/RX signals on the Beaglebone into the differential bus 
dominant/recessive that is the physical layer for CAN.

In addition, you must have *TWO* can nodes in order to test communication. 
 CAN *requires* an ACK before it will release the transmit buffer.

I would really suggest that you start with something simpler like SPI or 
I2C (both of which can be used directly off of the Beaglebone connectors). 
 CAN isn't hard, but it's not for beginners either.

If you just want to play with the CAN protocol, use the Linux virtual can 
drivers.  However, those won't put any signals on the wire so to speak as 
they truly are virtual.

Side note: wireshark is capable of decoding CAN packets and even the 
SocketCAN protocol!


On Friday, August 28, 2015 at 11:52:21 PM UTC-7, Onur Duran wrote:

 Thank you Andrew  for your suggestion.But i don't  want to  use any extra 
 hardware.I want to use direct BBB.Wonder if i couldn't find  Can Bus 
  driver for BBB ?

 28 Ağustos 2015 Cuma 16:53:08 UTC+3 tarihinde Andrew P. Lentvorski yazdı:

 Well, you need a CAN cape of some form to provide a CAN transceiver. 
  Something like this:
 http://www.logicsupply.com/cbb-serial/

 After that, follow the directions that the manufacturer provides.



-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [beagleboard] BeagleBone Black GPIO max frequency/bus latency (without using PRU)?

2015-08-30 Thread Andrew P. Lentvorski
I can confirm this with a scope.  After porting the kernel module from this 
topic:
https://groups.google.com/forum/#!topic/beagleboard/dyuax5415dc

I measured exactly 12.5MHz.  Apparently mmap is doing something stupid that 
slows down the access from user space.


On Monday, August 24, 2015 at 5:41:25 PM UTC-7, Charles Steinkuehler wrote:

 On 8/24/2015 7:26 PM, William Hermans wrote: 
  
  So this is word of mouth from these very forums perhaps a couple years 
 ago 
  but I do recall someone ( as in someone qualified to know - don't 
 remember 
  exactly who ) saying that technically, GPIO's can be toggled on/off at 
  100-200 Mhz - Using a PRU. 

 That's using the PRU direct I/O, *NOT* the GPIO pins.  There's a 
 difference.  :) 

 Even the PRU can only get about 12.5 MHz out of a GPIO pin, although 
 it can _easily_ get 100 MHz toggle rates (200 MHz update rate) from 
 the PRU direct outputs. 

 -- 
 Charles Steinkuehler 
 cha...@steinkuehler.net javascript: 


-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] Building kernel modules fails for Debian Jessie Linux Arm 4.1.6

2015-08-28 Thread Andrew P. Lentvorski
I tried a couple of different ways to build the hello world kernel 
module, but I seem to be lacking the proper build to use in my makefiles.

So, I installed the linux headers, but I seem to be missing a classmap.h 
file.

I also managed to get past git crashing by downloading the repo and then 
rsync'ing it to the BBB.  So, after 8 hours(!), the BBB fully compiled a 
4.1.6-ti-r12 build.  So, if there is something I can do to build a kernel 
module using that tree and scripts, I can do that, too.

What obvious thing am I missing?

Thanks.


The following NEW packages will be installed:
  linux-headers-4.1.6-ti-r11
0 upgraded, 1 newly installed, 0 to remove and 9 not upgraded.
Need to get 6,992 kB of archives.
After this operation, 52.9 MB of additional disk space will be used.
Get:1 http://repos.rcn-ee.com/debian/ jessie/main 
linux-headers-4.1.6-ti-r11 armhf 1jessie [6,992 kB]
Fetched 6,992 kB in 3s (2,199 kB/s) 
Selecting previously unselected package linux-headers-4.1.6-ti-r11.
(Reading database ... 84339 files and directories currently installed.)
Preparing to unpack .../linux-headers-4.1.6-ti-r11_1jessie_armhf.deb ...
Unpacking linux-headers-4.1.6-ti-r11 (1jessie) ...
Setting up linux-headers-4.1.6-ti-r11 (1jessie) ...
root@arm:~/kernels# cd /lib/modules/`uname -r`/build
root@arm:/lib/modules/4.1.6-ti-r11/build# ls
arch  block  crypto  Documentation  drivers  firmware  fs  include  init 
 ipc  Kconfig  kernel  lib  Makefile  mm  Module.symvers  net  samples 
 scripts  security  sound  tools  usr  virt
root@arm:/lib/modules/4.1.6-ti-r11/build# make scripts
scripts/kconfig/conf  --silentoldconfig Kconfig
  HOSTCC  scripts/selinux/genheaders/genheaders
scripts/selinux/genheaders/genheaders.c:13:22: fatal error: classmap.h: No 
such file or directory
 #include classmap.h
  ^
compilation terminated.
scripts/Makefile.host:91: recipe for target 
'scripts/selinux/genheaders/genheaders' failed
make[3]: *** [scripts/selinux/genheaders/genheaders] Error 1
scripts/Makefile.build:403: recipe for target 'scripts/selinux/genheaders' 
failed
make[2]: *** [scripts/selinux/genheaders] Error 2
scripts/Makefile.build:403: recipe for target 'scripts/selinux' failed
make[1]: *** [scripts/selinux] Error 2
Makefile:555: recipe for target 'scripts' failed
make: *** [scripts] Error 2




root@arm:~/bb-kernel/mymodules# cat makefile

obj-m += hello.o

all:
make -C /root/bb-kernel/KERNEL/tools/build M=$(PWD) modules

clean:
make -C /root/bb-kernel/KERNEL/tools/build M=$(PWD) clean


root@arm:~/bb-kernel/mymodules# make
make -C /root/bb-kernel/KERNEL/tools/build M=/root/bb-kernel/mymodules 
modules
make[1]: Entering directory '/root/bb-kernel/KERNEL/tools/build'
make[1]: *** No rule to make target 'modules'.  Stop.
make[1]: Leaving directory '/root/bb-kernel/KERNEL/tools/build'
makefile:5: recipe for target 'all' failed
make: *** [all] Error 2
root@arm:~/bb-kernel/mymodules# 



-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] Re: How write or use Can Bus driver on BBB with Ubuntu?

2015-08-28 Thread Andrew P. Lentvorski
Well, you need a CAN cape of some form to provide a CAN transceiver. 
 Something like this:
http://www.logicsupply.com/cbb-serial/

After that, follow the directions that the manufacturer provides.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [beagleboard] Building kernel modules fails for Debian Jessie Linux Arm 4.1.6

2015-08-28 Thread Andrew P. Lentvorski


On Friday, August 28, 2015 at 2:11:43 PM UTC-7, RobertCNelson wrote:

 bb-kernel repo has w.x.y-bonez kernel names... 

 https://github.com/RobertCNelson/ti-linux-kernel-dev 

 has what your are looking for kernel source... 


Aha!

Thank you.  That was the piece I was missing. 

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [beagleboard] Building kernel modules fails for Debian Jessie Linux Arm 4.1.6

2015-08-28 Thread Andrew P. Lentvorski
After I clean up my own two *very* stupid errors of not capitalizing the 
name of the Makefile and installing the *r12* headers (I had r11), it 
compiles and inserts.

During my experiments, though, I came across something odd.  As the missing 
piece appeared to be this symlink:

root@arm:~/mymodules# ls -al /lib/modules/4.1.6-ti-r12/build
lrwxrwxrwx 1 root root 35 Aug 26 21:17 /lib/modules/4.1.6-ti-r12/build - 
/usr/src/linux-headers-4.1.6-ti-r12



To make r12 compile, I tried creating this symlink:

root@arm:/# ln -s  /root/bb-kernel/KERNEL /lib/modules/4.1.6-ti-r12/build


Which does compile, but unfortunately doesn't seem to get the module info 
correct, so I can't insmod:

root@arm:~/mymodules# insmod hello.ko
insmod: ERROR: could not insert module hello.ko: Invalid module format
root@arm:~/mymodules# modinfo hello.ko
filename:   /root/mymodules/hello.ko
description:A Simple Hello World module
depends:
vermagic:   4.1.6-bone15 mod_unload modversions ARMv7 thumb2 p2v8 
root@arm:~/mymodules# uname -r
4.1.6-ti-r12



The conflict appears to be that vermagic gets set to 4.1.6-bone15 instead 
of r12.

Anyway, thanks for the advice.

For the record, here is my new Makefile (careful copying as make is nuts 
about tabs vs spaces):

root@arm:~/mymodules# cat Makefile

obj-m += hello.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean




-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] Best way to build a kernel module *on* the Beaglebone Black?

2015-08-27 Thread Andrew P. Lentvorski
While on my BBB, I tried to follow the directions for building a kernel 
from here:
https://eewiki.net/display/linuxonarm/BeagleBone+Black

Unfortunately, when I try to do ./build-kernel.sh to populate everything to 
deploy, git dies with error: index-pack died of signal 9555.  Presumably, 
it runs out of RAM.

So, what's the best way to build kernel modules on the BBB for 4.1.6?

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] Re: Can't seem to enable SPI0 on Beaglebone Black on Debian Jessie with 4.1.6 kernel

2015-08-26 Thread Andrew P. Lentvorski
Well, I still don't know why the overlays aren't working, but I seem to 
have gotten the clocks toggled correctly to avoid a SIGBUS Bus Error.

This code turns on the clocks and waits for them to become stable.  Then it 
reads the SPI0 version register for confirmation.


#include stdint.h

#include unistd.h

#include fcntl.h

#include sys/mman.h

#include stdio.h
#include assert.h


// Hunt these addresses down from ls -al /sys/devices/platform/ocp | grep 
gpio
// You can also pull them from the TI manual (spruh73l.pdf)

#define CM_PER_BASE 0x44E0
#define CM_PER_SIZE 0x4000

#define CM_PER_SPI0_CLKCTRL 0x4C
#define CM_PER_L4LS_CLKCTRL 0x60



#define MCSPI0_BASE 0x4803
#define MCSPI0_SIZE 0x1000


#define MCSPI_REVISION  (0x000)
#define MCSPI_SYSCONFIG (0x110)
#define MCSPI_SYSSTATUS (0x114)

#define MCSPI_SYST  (0x124)
#define MCSPI_MODULCTRL (0x128)


#define MCSPI_CH0CONF (0x12C)
#define MCSPI_CH0STAT (0x130)
#define MCSPI_CH0CTRL (0x134)



int main(int argc, char *argv[])
{

uint8_t volatile * bbCM_PERMap = NULL;
uint8_t volatile * bbMCSPI0Map = NULL;
uint32_t ui32tmp = 0;
uint32_t volatile * ppui32tmp = NULL;

int fd = open(/dev/mem, O_RDWR);

bbCM_PERMap = mmap(0, CM_PER_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, 
fd, CM_PER_BASE);
assert(bbCM_PERMap != MAP_FAILED);


*(uint32_t volatile *)(bbCM_PERMap+CM_PER_L4LS_CLKCTRL) = 0x0002; 
 // Enable L4LS_CLK
do {
ui32tmp = *(uint32_t volatile *)(bbCM_PERMap+CM_PER_SPI0_CLKCTRL);
sleep(1);
} while (((ui32tmp  16)  0x0003) != 0);  // Wait for L4LS_CLK to 
come up


*(uint32_t volatile *)(bbCM_PERMap+CM_PER_SPI0_CLKCTRL) = 0x0002; 
 // Enable SPI0 CLK
do {
ui32tmp = *(uint32_t volatile *)(bbCM_PERMap+CM_PER_SPI0_CLKCTRL);
sleep(1);
} while (((ui32tmp  16)  0x0003) != 0);  // Wait for module to 
come up



bbMCSPI0Map = mmap(0, MCSPI0_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, 
fd, MCSPI0_BASE);
assert(bbMCSPI0Map != MAP_FAILED);


ppui32tmp = (uint32_t volatile *)bbMCSPI0Map;
assert(bbMCSPI0Map == ppui32tmp);
ui32tmp = *ppui32tmp;  // Read the revision register
printf(SPI0 Revision: 0x%08x\n, ui32tmp);



close(fd);


return 0;
}


 

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] Can't seem to enable SPI0 on Beaglebone Black on Debian Jessie with 4.1.6 kernel

2015-08-25 Thread Andrew P. Lentvorski
I followed the directions here (as best I could given that device tree 
filenames have changed position again ... 
sigh): http://elinux.org/BeagleBone_Black_Enable_SPIDEV

Something seems wrong as I'm picking up /dev/spidev1.0 instead of 
/dev/spidev0.0

And when I try to mmap the SPI region and read it, I get a bus error.

Any suggestions?

Thanks.

root@arm:~# uname -a
Linux arm 4.1.6-ti-r11 #1 SMP PREEMPT Tue Aug 18 21:36:11 UTC 2015 armv7l 
GNU/Linux




I used this file for the overlay:
root@arm:~# cat BB-SPI0-01-00A0.dts 
/dts-v1/;
/plugin/;

/ {
compatible = ti,beaglebone, ti,beaglebone-black;

/* identification */
part-number = spi0pinmux;

fragment@0 {
target = am33xx_pinmux;
__overlay__ {
spi0_pins_s0: spi0_pins_s0 {
pinctrl-single,pins = 
  0x150 0x30  /* spi0_sclk, INPUT_PULLUP | MODE0 */
  0x154 0x30  /* spi0_d0, INPUT_PULLUP | MODE0 */
  0x158 0x10  /* spi0_d1, OUTPUT_PULLUP | MODE0 */
  0x15c 0x10  /* spi0_cs0, OUTPUT_PULLUP | MODE0 */
;
};
};
};

fragment@1 {
target = spi0;
__overlay__ {
 #address-cells = 1;
 #size-cells = 0;

 status = okay;
 pinctrl-names = default;
 pinctrl-0 = spi0_pins_s0;

 spidev@0 {
 spi-max-frequency = 2400;
 reg = 0;
 compatible = linux,spidev;
};
};
};
};



But when I enable it I seem to be picking up then wrong SPI interface?

root@arm:~# echo BB-SPI0-01  /sys/devices/platform/bone_capemgr/slots 
root@arm:~# ls -al /dev/spidev*
crw-rw 1 root spi 153, 0 Aug 25 10:02 /dev/spidev1.0



I can see it in the pin groups:
root@arm:~# cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pingroups
registered pin groups:
group: pinmux_clkout2_pin
pin 109 (44e109b4.0)

group: pinmux_uart0_pins
pin 92 (44e10970.0)
pin 93 (44e10974.0)

group: pinmux_mmc1_pins
pin 60 (44e108f0.0)
pin 61 (44e108f4.0)
pin 62 (44e108f8.0)
pin 63 (44e108fc.0)
pin 64 (44e10900.0)
pin 65 (44e10904.0)
pin 104 (44e109a0.0)
pin 88 (44e10960.0)

group: pinmux_mmc1_pins_sleep
pin 60 (44e108f0.0)
pin 61 (44e108f4.0)
pin 62 (44e108f8.0)
pin 63 (44e108fc.0)
pin 64 (44e10900.0)
pin 65 (44e10904.0)
pin 104 (44e109a0.0)
pin 88 (44e10960.0)

group: user_leds_s0
pin 21 (44e10854.0)
pin 22 (44e10858.0)
pin 23 (44e1085c.0)
pin 24 (44e10860.0)

group: pinmux_i2c0_pins
pin 98 (44e10988.0)
pin 99 (44e1098c.0)

group: pinmux_i2c2_pins
pin 94 (44e10978.0)
pin 95 (44e1097c.0)

group: cpsw_default
pin 66 (44e10908.0)
pin 67 (44e1090c.0)
pin 68 (44e10910.0)
pin 69 (44e10914.0)
pin 70 (44e10918.0)
pin 71 (44e1091c.0)
pin 72 (44e10920.0)
pin 73 (44e10924.0)
pin 74 (44e10928.0)
pin 75 (44e1092c.0)
pin 76 (44e10930.0)
pin 77 (44e10934.0)
pin 78 (44e10938.0)
pin 79 (44e1093c.0)
pin 80 (44e10940.0)

group: cpsw_sleep
pin 66 (44e10908.0)
pin 67 (44e1090c.0)
pin 68 (44e10910.0)
pin 69 (44e10914.0)
pin 70 (44e10918.0)
pin 71 (44e1091c.0)
pin 72 (44e10920.0)
pin 73 (44e10924.0)
pin 74 (44e10928.0)
pin 75 (44e1092c.0)
pin 76 (44e10930.0)
pin 77 (44e10934.0)
pin 78 (44e10938.0)
pin 79 (44e1093c.0)
pin 80 (44e10940.0)

group: davinci_mdio_default
pin 82 (44e10948.0)
pin 83 (44e1094c.0)

group: davinci_mdio_sleep
pin 82 (44e10948.0)
pin 83 (44e1094c.0)

group: spi0_pins_s0
pin 84 (44e10950.0)
pin 85 (44e10954.0)
pin 86 (44e10958.0)
pin 87 (44e1095c.0)




Program which returns a Bus Error:
root@arm:~/gpio# clang -Wall -g -o spi_test spi.c
root@arm:~/gpio# ./spi_test 
Bus error
root@arm:~/gpio# cat spi.c


#include stdint.h

#include unistd.h

#include fcntl.h

#include sys/mman.h

#include assert.h


// Hunt these addresses down from ls -al /sys/devices/platform/ocp | grep 
gpio
// You can also pull them from the TI manual (spruh73l.pdf)

#define MCSPI0_BASE 0x4803
#define MCSPI0_SIZE 0x1000


#define MCSPI_REVISION  (0x000)
#define MCSPI_SYSCONFIG (0x110)
#define MCSPI_SYSSTATUS (0x114)

#define MCSPI_SYST  (0x124)
#define MCSPI_MODULCTRL (0x128)


#define MCSPI_CH0CONF (0x12C)
#define MCSPI_CH0STAT (0x130)
#define MCSPI_CH0CTRL (0x134)



int main(int argc, char *argv[])
{
uint8_t volatile * bbMCSPI0Map = NULL;
uint32_t ui32tmp = 0;

int fd = open(/dev/mem, O_RDWR);

bbMCSPI0Map = mmap(0, MCSPI0_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, 
fd, MCSPI0_BASE);
assert(bbMCSPI0Map != MAP_FAILED);


ui32tmp = *(uint32_t volatile *)(bbMCSPI0Map + MCSPI_SYSSTATUS);
assert((ui32tmp  0x0001) != 0);



//while(1) {
//}


close(fd);


return 0;
}



-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit 

[beagleboard] BeagleBone Black GPIO a bit slow via /dev/mem and mmap?

2015-08-24 Thread Andrew P. Lentvorski
Hi, folks,

I have been trying to bit bang an interface on the GPIO pins.  I looked at 
a bunch of the tutorials on the web and managed to build something that 
worked.  However, the speed seems to be a bit slower than I would expect.

My scope shows that I am running at about 2.95MHz (It also roughly matches 
the result from here--http://chiragnagpal.com/examples.html of 2.78MHz). 
 That seems slow--I would have expected closer to 25MHz--so I think I'm an 
order of magnitude off somewhere  The assembly code seems to be as 
expected, so my question is:

What is slowing things down?

Since the assembly is basically ldr/str in a chain, something must be 
stalling the pipeline, but I don't know what.

Suggestions would be appreciated.

I'm running Debian Jessie Linux arm 4.1.6-ti-r11 #1 SMP PREEMPT Tue Aug 18 
21:36:11 UTC 2015 armv7l GNU/Linux

Thanks.


The assembly code looks optimal at 4 instructions per toggle (I'm using 
clang):
.loc2 80 2  @ gpi.c:80:2
ldr r1, [sp, #28]
str r0, [r1]
.loc2 81 9  @ gpi.c:81:9
ldr r1, [sp, #32]
str r0, [r1]
.loc2 82 2  @ gpi.c:82:2
ldr r1, [sp, #28]
str r0, [r1]
.loc2 83 9  @ gpi.c:83:9
ldr r1, [sp, #32]
str r0, [r1]



The C Code I used to toggle the pin P9_23 (GPIO1_17):


#include stdint.h
#include stdio.h
#include stdlib.h
#include sys/mman.h
#include sys/stat.h
#include fcntl.h 

#include unistd.h
#include assert.h

#define GPIO_OE 0x134
#define GPIO_SETDATAOUT 0x194
#define GPIO_CLEARDATAOUT 0x190


// Hunt these addresses down from ls -al /sys/devices/platform/ocp | grep 
gpio
// You can also pull them from the TI manual (spruh73l.pdf)
#define GPIO0_BASE 0x44E07000
#define GPIO1_BASE 0x4804C000
#define GPIO2_BASE 0x481AC000
#define GPIO3_BASE 0x481AE000

#define GPIO_SIZE  0x1000


#define PIN_17 ((uint32_t)117)


uint32_t ui32Base[] = {GPIO0_BASE, GPIO1_BASE, GPIO2_BASE, GPIO3_BASE};
uint8_t volatile * bbGPIOMap[] = {0, 0, 0, 0};


int main(int argc, char *argv[])
{
unsigned int ui;

uint32_t volatile * gpio_oe_addr = NULL;
uint32_t volatile * gpio_setdataout_addr = NULL;
uint32_t volatile * gpio_cleardataout_addr = NULL;


int fd = open(/dev/mem, O_RDWR);

for(ui=0; ui4; ++ui) {
bbGPIOMap[ui] = mmap(0, GPIO_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 
ui32Base[ui]);
assert(bbGPIOMap[ui] != MAP_FAILED);
}


gpio_oe_addr = (uint32_t volatile *)(bbGPIOMap[1] + GPIO_OE);
gpio_setdataout_addr = (uint32_t volatile *)(bbGPIOMap[1] + 
GPIO_SETDATAOUT);
gpio_cleardataout_addr = (uint32_t volatile *)(bbGPIOMap[1] + 
GPIO_CLEARDATAOUT);



*gpio_oe_addr = *gpio_oe_addr  ~PIN_17;

while(1) {
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
}

//*(uint32_t volatile *)(bbGPIOMap[3] + GPIO_SETDATAOUT) = (uint32_t)1 
 14;
//*(uint32_t volatile *)(bbGPIOMap[3] + GPIO_CLEARDATAOUT) = 
(uint32_t)1  14;

close(fd);
return 0;
}



-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] BeagleBone Black GPIO access via mmap is slow

2015-08-24 Thread Andrew P. Lentvorski
Hi, folks,

I've been poking around to get GPIO to work via /dev/mem and mmap.  After 
finally pushing a lot of things around, I finally managed to pull the 
various flavors of tutorials together into something I now understand 
(mostly).

However, what I *don't* understand is that when I put my scope on the pin, 
I see it toggle at 2.95MHz.  That seems slow.  This is the same frequency 
as here: http://chiragnagpal.com/examples.html

The question is: Why?

I could understand if it was something like 30MHz, but 3MHz seems off by an 
order of magnitude.  And when something seems off in embedded programming, 
it's usually a bug waiting to bite you when you least need it.

I'm on a BeagleBoard Black with Debian Jessie Linux arm 4.1.6-ti-r11 #1 SMP 
PREEMPT Tue Aug 18 21:36:11 UTC 2015 armv7l GNU/Linux

Any suggestions?  Given that the assembly seems to be spot on, *something* 
appears to be stalling the pipeline.

Is the core being throttled?  Is the peripheral bus at some strange 
frequency?  Is the memory mapping hardware inserting cycles?  I'm 
completely at a loss.

Thanks for any advice.


The assembly looks exactly optimal with a ldr/str sequence at maximum 
density (I'm using clang):

.loc 2 83 9  @ gpi.c:83:9
ldr r1, [sp, #32]
str r0, [r1]
.loc 2 84 2  @ gpi.c:84:2
ldr r1, [sp, #28]
str r0, [r1]
.loc 2 85 9  @ gpi.c:85:9
ldr r1, [sp, #32]
str r0, [r1]
.loc 2 86 2  @ gpi.c:86:2
ldr r1, [sp, #28]
str r0, [r1]



And here's the C code I used to generate the pulse train on P9 Pin23 
(GPIO1[17])



#include stdint.h
#include stdio.h
#include stdlib.h
#include sys/mman.h
#include sys/stat.h
#include fcntl.h 

#include unistd.h
#include assert.h

#define GPIO_OE 0x134
#define GPIO_SETDATAOUT 0x194
#define GPIO_CLEARDATAOUT 0x190


// Hunt these addresses down from ls -al /sys/devices/platform/ocp | grep 
gpio
// You can also pull them from the TI manual (spruh73l.pdf)
#define GPIO0_BASE 0x44E07000
#define GPIO1_BASE 0x4804C000
#define GPIO2_BASE 0x481AC000
#define GPIO3_BASE 0x481AE000

#define GPIO_SIZE  0x1000


#define PIN_17 ((uint32_t)117)


uint32_t ui32Base[] = {GPIO0_BASE, GPIO1_BASE, GPIO2_BASE, GPIO3_BASE};
uint8_t volatile * bbGPIOMap[] = {0, 0, 0, 0};


int main(int argc, char *argv[])
{
unsigned int ui;

uint32_t volatile * gpio_oe_addr = NULL;
uint32_t volatile * gpio_setdataout_addr = NULL;
uint32_t volatile * gpio_cleardataout_addr = NULL;


int fd = open(/dev/mem, O_RDWR);

for(ui=0; ui4; ++ui) {
bbGPIOMap[ui] = mmap(0, GPIO_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 
ui32Base[ui]);
assert(bbGPIOMap[ui] != MAP_FAILED);
}


gpio_oe_addr = (uint32_t volatile *)(bbGPIOMap[1] + GPIO_OE);
gpio_setdataout_addr = (uint32_t volatile *)(bbGPIOMap[1] + 
GPIO_SETDATAOUT);
gpio_cleardataout_addr = (uint32_t volatile *)(bbGPIOMap[1] + 
GPIO_CLEARDATAOUT);



*gpio_oe_addr = *gpio_oe_addr  ~PIN_17;

while(1) {
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
*gpio_setdataout_addr = PIN_17;
*gpio_cleardataout_addr = PIN_17;
}

close(fd);
return 0;
}



-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [beagleboard] BeagleBone Black GPIO a bit slow via /dev/mem and mmap?

2015-08-24 Thread Andrew P. Lentvorski
On Monday, August 24, 2015 at 7:27:35 AM UTC-7, Charles Steinkuehler wrote:


 Optimal would be a sequence of successive stores to the set and clear 
 register, with the addresses pre-calculated and sitting in registers 
 (or with a base address and use the str instruction with an immediate 
 offset).


Good point.  I can beat the compiler into submission if I want to, but it's 
probably not worth the effort as I need to do other logic anyway.
 

 You might also need to 
 move the volatile on the variable definitions.  I'm not a C guru, 
 but I think: 

   uint32_t volatile * gpio_setdataout_addr 

 ...is different from: 

   volatile uint32_t * gpio_setdataout_addr 

 ...you want the uint32_t to be volatile, not the pointer to it.



This is one of those C quirks.  It's actually a habit from const but it 
applies to volatile as well.  Oddly, the qualifiers generally apply to 
the *left* except under certain circumstances where they can apply right. 
 This gets people into trouble when they specify:

volatile uint32_t volatile * blah;

Which is actually a *redundant* specifier as opposed to what they wanted:

volatile uint32_t * volatile blah;

Not every compiler (*especially* embedded ones) will eject a warning on the 
duplicate declaration specifier.  So, I personally always put them on the 
right to avoid the issue. 

...but I write C code like a hardware guy who programs in VHDL.  :) 


Not a damn thing wrong with that, thank you very much.  Software-only 
people tend to be amazed that you can write a state machine that is 
*readable* in code.  A very experienced programmer once told me: Your code 
is the most straightforward code I have ever read.

Of course, I have to condemn you as a dirty apostate for not using Verilog. 
 :)  (Seriously, though, when is somebody going to produce an open-source 
VHDL simulator/compiler so that I can actually use it on projects?)

 

 Regardless, note that the maximum toggle rate of a GPIO pin using the 
 PRU is about 12.5 MHz, dictated by the ~40 nS required to execute a 
 write by the on-chip communication fabric (which means 80 nS period 
 for a high/low toggle of the pin).  This assumes the CPU and the PRU 
 have similar bandwidth to the L4 fabric, which may or may not be the 
 case (but I suspect is true).


Do you have a pointer to the reference manual for this (if not, don't waste 
a lot of time, I'll dig it out)?  Given that this seems to be *very* 
fundamental about understanding the architecture, I really probably need to 
chase this down exactly.

Thanks for the advice.  I appreciate your taking the time on this.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] BeagleBone Black GPIO max frequency/bus latency (without using PRU)?

2015-08-24 Thread Andrew P. Lentvorski
I've been trying to hunt down the maximum frequency on the BeagleBone Black 
GPIO pins.

This *seems* to be dominated by the transaction latency across the L3/L4 
interconnect.  Fair enough.  So ...


What's the latency number?


I've *measured* about 166ns per transaction (I can create a roughly 3MHz 
toggle which is 2 pin flips which requires 6MTransactions/s which is 
166.66ns per transaction).  But I don't know how to *calculate* that number 
from the documentation.

I've been through the TI reference manuals, the TI support forums, and a 
bunch of other things, but *nobody* seems to be able to cough up an actual 
number for this.

Anybody have some references to frequencies and bus wait numbers?  They may 
be out there, but GTMF/RTFM doesn't seem to be sufficient.

I don't need turbo speed, but the fact that it's entirely possible that I 
may not even be able run at 1MHz (something *painfully* easy for most M0 or 
M3/M4 cores) is, frankly, a bit of a shock.

Thanks.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [beagleboard] BeagleBone Black GPIO a bit slow via /dev/mem and mmap?

2015-08-24 Thread Andrew P. Lentvorski
On Monday, August 24, 2015 at 5:10:11 PM UTC-7, William Hermans wrote:

 I think the actual scope matters more. e.g. global versus local scope. But 
 maybe I'm remembering wrongly as I recall reading something to this effect 
 years ago. Anyway, I find this link the best single resource for explaining 
 what volatile *is* - And . . I'm not trying to start an argument or 
 anything, I just like discussing programming in general.

 http://www.barrgroup.com/Embedded-Systems/How-To/C-Volatile-Keyword


Um, that article is in violent agreement with me.  :)

Incidentally, for a great explanation of why you have a choice of where to 
 place volatile and why you should place it after the data type (for 
 example, int volatile * foo), read Dan Sak's column Top-Level 
 cv-Qualifiers in Function Parameters (Embedded Systems Programming, 
 February 2000, p. 63).



-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [beagleboard] BeagleBone Black GPIO max frequency/bus latency (without using PRU)?

2015-08-24 Thread Andrew P. Lentvorski
On Monday, August 24, 2015 at 5:39:54 PM UTC-7, Charles Steinkuehler wrote:

 On 8/24/2015 6:12 PM, Andrew P. Lentvorski wrote: 
  I've been trying to hunt down the maximum frequency on the BeagleBone 
 Black 
  GPIO pins. 
  
  This *seems* to be dominated by the transaction latency across the L3/L4 
  interconnect.  Fair enough.  So ... 
  
  What's the latency number? 
  
  I've *measured* about 166ns per transaction (I can create a roughly 3MHz 
  toggle which is 2 pin flips which requires 6MTransactions/s which is 
  166.66ns per transaction).  But I don't know how to *calculate* that 
 number 
  from the documentation. 

 I've measured 40 ns from the PRU.  I'm not sure if the CPU can match 
 this, but I'd be surprised if it couldn't. 


Well, there could be some silliness involving the fact that the memory is 
mmap'd in Linux.  A TLB access or something similar might be required that 
could add overhead.

This is a bit lower level than you'll find in most reference manuals, 
 and falls into the category of if it's _really_ important to you, 
 contact the manufacturer and verify...and I hope you're buying a 
 *LOT* of parts, because this is the sort of thing that is subject to 
 change with die revisions.  :) 


It actually surprises me that this information isn't documented.  However, 
I presume it's because most people using this high-end a processor really 
only use the peripherals.  The only thing most people really use the GPIO's 
for is generating interrupts.

I suspect I could live with things as they stand, but this is really going 
to make things ... annoying.

I may be better off just trying to do nasty things to the McSPI subsystem. 
 SPI really doesn't like bi-directional data lines, though.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [beagleboard] Re: Beaglebone Mac OSX = NIGHTMARE

2015-02-25 Thread Andrew P. Lentvorski
Thanks for this.  I'll pull this into a separate thread as we're drifting 
way off-topic now ...

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [beagleboard] Re: Beaglebone Mac OSX = NIGHTMARE

2015-02-25 Thread Andrew P. Lentvorski
Unlike the original poster, I'm not taking offense.  People are doing the 
best they can.

However, I will say that, as a user, spelunking through BeagleBone Black 
documentation has been kind of painful.

If you can stay at the Python/Javascript level, things are quite decent. 
 Even basic Linux stuff is fine.

However, once you need to get down into the Linux device level, the number 
of people who really understand what is going on drops very quickly.  And I 
suspect those vitally important people are so overwhelmed doing real work 
or paid work and that they really don't have the bandwidth for random 
documentation and tutorial construction.  And, even if they did, how many 
people would it benefit?  Sure, I'd love to have some really detailed 
tutorials since most of them older than even 6 months generally don't work, 
but if there are only 5 of us who could make use of those tutorials, is it 
a good use of time?  Especially when there is so much flux right now?

I see about 30 BeagleBone Black compatible capes; the fact that some of 
those don't work directly under Debian shows that even highly knowledgable 
people don't understand all the implications.  So, that bounds the number 
of people who can talk intelligently about kernel device stuff (and that's 
of the right order of magnitude for views).  That's not a very big pool to 
draw from. 


I do agree, however, that the original poster is out of line.  Anybody who 
does real embedded development on OS X knows to keep Windows XP, Windows 7, 
and Linux virtual machines on tap.  If it works directly on OS X, that's a 
nice bonus, but counting on it is just asking for trouble--and OS X 10.10 
has been a general disaster on many fronts.






On Tuesday, February 24, 2015 at 6:10:51 PM UTC-8, RobertCNelson wrote:

 On Tue, Feb 24, 2015 at 8:00 PM, Andrew P. Lentvorski bsd...@gmail.com 
 javascript: wrote: 
  To be fair, ranting at least got him a response. 
  
  Lots of people seem to be asking questions and I see like single digit 
 views 
  and no responses. 
  
  It feels like a ghost town in here. 

 Well the unfortunate side of open source..  Most developers are not 
 paid to answer just questions. Instead they are here on their own free 
 time.  So unless you entice them with an interesting topic/question, 
 they aren't going to take time to answer it. 

 Sorry if this offends anyone. 

 btw, google groups also emails these topics to registered users, so 
 just because the forum interface shows a few views doesn't 
 actually show the whole story..  Some of us read every 'email' and 
 answer where we can. 

 Regards, 

 -- 
 Robert Nelson 
 http://www.rcn-ee.com/ 


 

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] Re: Beaglebone Mac OSX = NIGHTMARE

2015-02-24 Thread Andrew P. Lentvorski
To be fair, ranting at least got him a response.

Lots of people seem to be asking questions and I see like single digit 
views and no responses.

It feels like a ghost town in here.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] CAN-CAPE TT3201 CAN/CANBUS on BeagleBone Black Redux

2015-02-17 Thread Andrew P. Lentvorski
Anyway ... tl;dr I can verify that 2 of the 3 CANBUS interfaces on the 
TT3201 work.  The third looks like it should work, but I didn't verify it.

For those who would like to actually use the thing, here's the notes I was 
taking as I was going along in case I need to repeat this:


Dealing with CANBUS on the TT3201 with BeagleBone Black:

1) Start from 

Angstrom Distribution (BeagleBone, BeagleBone Black - 4GB SD) 2013-06-20 
https://s3.amazonaws.com/angstrom/demo/beaglebone/Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.12-beaglebone-2013.06.20.img.xz


2)  Expanded partition to 16GB--I did everything from a uSD card rather 
than eMMC which seems to sidestep some collisions and timing problems with 
certain things that people reported on different groups.


3) opkg update 
4) opkg upgrade

(This dance required a couple of rounds and I had to shut down services on 
port 80 to get around an error)

Lather/rinse/repeat 34 until it converges.


5) Upgrade the kernel TowerTech's 3.8.13+ custom thing that you have to get 
directly from them

Really guys?  You don't just have a public link/repository in this day and 
age?  Sigh.  They did provide it within 24 hours, so yay for a vendor who 
actually responds to their support email address.

5b) Reboot



6) The default can utilities appear to be broken (or maybe I just don't 
understand them--wouldn't be the first time shrug).  You need to compile 
up a new set of can-utils from here: 
https://gitorious.org/linux-can/can-utils

Standard ./autogen.sh ./configure make dance applies as for anything 
afflicted with the autotools curse.



7) Connect can0 to can1--Connect Pin 8 to Pin 6 and Pin 7 to Pin 5.

Pinout data in the TT3201 user manual does appear to be correct.  I 
verified some stuff on my scope, but can2 exhibits different behavior from 
can0 and can1.  Not surprising since the first two seem to come from the 
MCP2515 chips and the other is directly from the SoC.

CAN0 - IC4 - Pin 7 and Pin 8 on connector
CAN1 - IC5 - Pin 5 and Pin 6 on connector
CAN2 - IC6 - Odd behavior that I still haven't worked out


8) Push the 3 switches on S1 away from the edge of the board

This seems to connect the 120Ohm terminating resistors for the interfaces.


9) Configure can buses

root@beaglebone:~# ip link set can0 type can bitrate 125000
root@beaglebone:~# ip link set can1 type can bitrate 125000
root@beaglebone:~# ip link set can0 up 
root@beaglebone:~# ip link set can1 up

CAUTION: My scope shows the TX line as being 15.8us from rising 
edge-to-rising edge.  That's exactly 1/2 of 125000 (as it should be since 
that's 2 *bits*), but it confused me until I thought about it for a bit. 
 So if you are interfacing to a different CAN system, make sure that you 
agree on what bitrate actually means.


10) Run cansend and candump in two different windows/sessions/whatever

root@beaglebone:~# cd linux-can-can-utils/
root@beaglebone:~/linux-can-can-utils# ./candump can1
  can1  1F334455   [8]  11 22 33 44 55 66 77 88

root@beaglebone:~# cd linux-can-can-utils/
root@beaglebone:~/linux-can-can-utils# ./cansend can0 
1F334455#1122334455667788


11) Resist urge to crumple up into a gibbering heap in the corner


As always, your mileage may vary.  Offer not valid anywhere.  You're on 
your own--cope.  Be careful out there.  Go pound sand.  Etc.


Anybody want to tackle doing this in straight Debian (TowerTech sends you a 
repo link)?  I'll buy you a beer.  Maybe even two.  Possibly a six pack.

Please?  Pretty please?  Don't make me do this again ... breaks down 
crying

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [beagleboard] CAN-CAPE TT3201

2015-02-15 Thread Andrew P. Lentvorski
I did check the transceiver.  The RX toggles fine (I have a board that 
generates CAN transactions that is not a Beaglebone);  the TX doesn't 
budge.  So, the transceiver appeears to be working.  Whether that means 
that the RX and TX on the SoC are connected correctly is a different 
question.

The Linux configuration is certainly not automatic, but I followed the 
directions here and they seem to work:
http://www.embedded-things.com/bbb/enable-canbus-on-the-beaglebone-black/

The problem is that lots of things are still linked to berlios.de for a 
subversion repository, and that's all gone with no pointer to where a new 
one would be.


I'm looking primarily at the CAN interface that is directly connected to 
the DCAN1 interface on the ARM SoC.  The *only* thing needed is for the CAN 
transceiver (a very simple chip) TX/RX to be connected to the correct lines 
on the ARM SoC.  I'm trying to stay away from the CAN interfaces that 
require SPI communication to the CAN controller chips from Microchip as 
that's a whole 'nother ball of wax.

I haven't physically traced the lines (yet) since I would have to create a 
Blinky LED switcher test since the pin is underneath the SoC, but it 
seems that people have managed to get this working in the past so I would 
be very surprised if those lines moved.  Although, I should probably go 
check the schematics on the Beagleboard or previous Beaglebone to see if 
something actually did... Mr. Murphy is always hanging around ...

I'm more concerned about the fact that the cansend, cancontrol, etc. 
commands in the tutorials simply don't reflect anything close to reality on 
the current versions as well as the references to berlios.de.  Something 
major changed, but there is no trace of it.  The fact that nobody has 
created new tutorials means that this stuff may be untested for quite a bit 
of time.  I suspect if I could run *that* down, everything else would 
probably fall into place.



On Sunday, February 15, 2015 at 9:51:14 PM UTC-6, lazarman wrote:

 I saw similar issues but didnt have a scope. Did you check the inputs to 
 transciever with scope ??. I'd bet the IO is not configured properly for 
 that cape

   --
  *From:* Andrew P. Lentvorski bsd...@gmail.com javascript:
 *To:* beagl...@googlegroups.com javascript: 
 *Sent:* Thursday, February 12, 2015 8:12 PM
 *Subject:* [beagleboard] CAN-CAPE TT3201
  
 Beaglebone black newb here.  I've been fighting with various problems with 
 getting CAN to work and not really getting anywhere.  Does anybody have a 
 detailed set of instructions for the TT3201?

 I'm trying to use the onboard Beaglebone Black CAN which is routed 
 directly to a transceiver to avoo
 In addition, it seems like can_utils, can-utils, ceiveror canutils have 
 become a victim of bitrot and berlios.de going down.  Almost all the 
 tutorials have cansend can0 -i 0x11 0x22 when the cansend command I have 
 supports cansend can0 FED#DEADBEEF.  In addition, I don't even have a 
 cancontrol command.  Clearly, *something* has changed significantly.

 I've got my scope connected, and nothing external is toggling.  Do I have 
 to use Angstrom or Debian?  Is there a particular image I need to load to 
 make this work?  Am I doing something completely stupid (almost certainly)?

 Any pointers would be useful.

 Thanks.



  -- 
 For more options, visit http://beagleboard.org/discuss
 --- 
 You received this message because you are subscribed to the Google Groups 
 BeagleBoard group.
 To unsubscribe from this group and stop receiving emails from it, send an 
 email to beagleboard...@googlegroups.com javascript:.
 For more options, visit https://groups.google.com/d/optout.


  

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[beagleboard] CAN-CAPE TT3201

2015-02-13 Thread Andrew P. Lentvorski
Beaglebone black newb here.  I've been fighting with various problems with 
getting CAN to work and not really getting anywhere.  Does anybody have a 
detailed set of instructions for the TT3201?

I'm trying to use the onboard Beaglebone Black CAN which is routed directly 
to a transceiver to avoid the extra problems with SPI.  I expected this to 
be built into the distribution, but apparently it is not.

In addition, it seems like can_utils, can-utils, or canutils have become a 
victim of bitrot and berlios.de going down.  Almost all the tutorials have 
cansend can0 -i 0x11 0x22 when the cansend command I have supports 
cansend can0 FED#DEADBEEF.  In addition, I don't even have a cancontrol 
command.  Clearly, *something* has changed significantly.

I've got my scope connected, and nothing external is toggling.  Do I have 
to use Angstrom or Debian?  Is there a particular image I need to load to 
make this work?  Am I doing something completely stupid (almost certainly)?

Any pointers would be useful.

Thanks.



-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
BeagleBoard group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.