On 28/09/18 16:06, mngr wrote:


Il giorno venerdì 28 settembre 2018 15:10:04 UTC+2, Schooner ha scritto:

On 28/09/18 13:21, mngr wrote:
edited from 0x20000000 to 0x3F000000 and now the raspberry loads the hal_spi module. hal_spi.c should check the Pi version in a similar way to hal_gpio.c .

Well done.

There were no other Pi versions when it was written.

Would you like to submit a PR?
sure thing!
I have just seen that after modifying naively BCM2835_PERI_BASE the chip select stops working.
there is some part of hal_spi that I don't understand: a very lot of costants in hal_spi.h are not used;
and https://github.com/machinekit/machinekit/blob/master/src/hal/drivers/hal_spi.c#L401 it does something on GPIO23 and 24. for which raspberry version was it written?

It can only have been written for v1 or v2, probably not v2B given its date of writing.
I have not heard anything of the guy who wrote it for some years either.

I see it is related to pin_out hal pin, but... how was it designed?


Cut and paste the hal_gpio.c code that version checks into hal-spi.c and test that.
 
I only have rasppberry 3B on my desk, so I only can test on it.

That's fine, we  know it worked with earlier versions, if it can detect a v3B and change the main base address accordingly
so that it works, it will be improved

If the BCM2835_PERI_BASE works, then leave as is.



 


Il giorno mercoledì 26 settembre 2018 12:33:31 UTC+2, mngr ha scritto:
The cpuinfo information says BCM2835 for any raspberry version you can have, this helps with something in the kernel, the revision is the filed actually accurate.
The first version of RPi have the base address at 0x20000000 from RPi 2 on it is at  0x3F000000

hal gpio recognize this difference, hal_spi does not, I still have to run hal gpio, though, will do it in next days

https://web.stanford.edu/class/cs140e/docs/BCM2837-ARM-Peripherals.pdf
here is a BCM 2837 datasheet that shows all the addresses, I will try to correct them in next days

Other says to have a SPI driver for the 2710 (aka 2837) but it is hard to find the code, in case I will try to ask directly to them


Il giorno lunedì 24 settembre 2018 11:41:53 UTC+2, Schooner ha scritto:
Well, despite what /proc/cpuinfo says, I don't see how it can be a BCM2835 Soc.

The elinux hardware history (https://elinux.org/RPi_HardwareHistory) clearly shows the v3 B has a BCM2037 and even if you
were sold an almost identical v2 B purporting to be a v3 B, it would have a BCM2036.

Looks like it is testing CS (chip select) to see if it is in an active state and waiting until it is?
Hence my question about whether SPI was activated.
The most likely sources of the problem are either that SPI is inactive or
that whatever address *spi points to it does not contain what is expected so the & test will never result as expected.

This in turn makes one suspicious about what will happen when the driver is attached to a thread and started.
Will it work?

It might be useful to try to get the hal_gpio demo running on the board with DEBUG set and look at the output.

Regards the args, that is peculiar.  Just ignore the print out.
Look at hal_gpio.c for an example of how RTAPI_MP_STRING should appear, and then you can see them being used in the later code.
If there is any initialisation to be done it would normally be in rtapi_app_main()

You need to find someone who is up on bit twiddling on the v3 B and check all the addresses and offsets with them.
(Particularly the SPI_BASE offset, which may or may not vary between models of Soc)


On 23/09/18 20:35, mngr wrote:
I am really sorry Schooner, I was excited about the findings...
I actually don't know which args suits my setup, I looked in the source, but I don't know how to find where they are used,
I tried to scroll it all, but found no place that seems to use them.
My board is a Raspberry Pi 3 model B  V 1.2 and attached you can find the cpuinfo output
Spi is enabled from raspi-config, and in /dev there is spidev0.0 and spidev0.1

Il giorno domenica 23 settembre 2018 19:35:25 UTC+2, Schooner ha scritto:
OK, good there is some progress.

You will probably find that whilst loaded, it may not work.

That while statement is actually
while(!( *(spi + 0) & 0x00010000)
which is extremely specific and if something has changed or if SPI is not enabled, it will hang forever.

(gripe here, I have asked you 3 specific questions and you have not answered any of them)


On 23/09/18 18:01, mngr wrote:
Thanks for the explanation about machinkit workings,

I played with the stamps and found that it was blocking on
while (!(BCM2835_SPICS & SPI_CS_DONE)); (Line 438)

removing it halrun loads, now I will see if and what it writes. maybe I will have to control the low level implementation... but now I know more things.

One more question, how does a hal module read the args?


Il giorno domenica 23 settembre 2018 17:47:44 UTC+2, Schooner ha scritto:
Sep 23 15:03:17 realtimepi rtapi:0: 4:rtapi_app:701:user hal_spi.so default iparms: ''
Sep 23 15:03:17 realtimepi rtapi:0: 1:rtapi_app:701:user : hal_spi init!!!!err
Sep 23 15:03:17 realtimepi rtapi:0: 4:rtapi_app:701:user : hal_spi init!!!!dbg
Sep 23 15:03:17 realtimepi rtapi:0: 4:rtapi_app:701:user halg_xinitfv:90 HAL: initializing component 'hal_spi' type=1 arg1=0 arg2=0/0x0

Since you haven't said where these extra prints are located, their presence means nothing to me
The module is obviously loading to a point but it does not look as though the driver is getting any further than hal_init, which calls halg_xinitfv()
then is failing catastrophically

You are loading with no args, are the defaults suitable for your board / setup?
Not that it looks that it gets that far, due the complete absence of other error or info messages

The insmod error is completely non specific, so doesn't help, may just be picking up the last return value.

What is the output from /proc/cpuinfo and what version etc is your Pi?



On 23/09/18 16:12, mngr wrote:
Attached.

In the log you can see the message I added in the hal_spi rtapi_app_main.

pi@realtimepi:~ $ halcmd loadrt hal_spi
<commandline>:0: insmod failed, returned -1:
rtapi_rpc
(): reply timeout
See /var/log/linuxcnc.log for more information.
pi@realtimepi
:~ $ halcmd show all
halcmd
: cant connect to rtapi_app: -1 (uri= uuid=a42c8c6b-4025-4f83-ba28-dad21114744a): rtapi_rpc(): reply timeout

E
: 18-09-23 15:04:20 dangling 'DEALER' socket created at hal/utils/halcmd_rtapiapp.cc:281


Il giorno domenica 23 settembre 2018 16:43:25 UTC+2, Schooner ha scritto:

On 23/09/18 15:16, mngr wrote:


Il giorno domenica 23 settembre 2018 15:34:58 UTC+2, Schooner ha scritto:
It's not about doubt
cat /proc/cpuinfo
will tell you whether you have BCM2835
 
Thanks didn't know about that! on the rpi is written 2837, bit cpuinfo says 2835!
So at least the part that writes in the SPI registers should work.

I tried to add some debug message in hal_spi rtapi_app_main function, but I don't see them anywhere, I have exported DEBUG=5, and maximized the DEBUG value in the ini file. I am looking in /var/log/linuxcnc.log and in the terminal output.
I have tried with different msg types

rtapi_print_msg(RTAPI_MSG_ERR, ": hal_spi init!!!!err\n");
rtapi_print_msg(RTAPI_MSG_DBG, ": hal_spi init!!!!dbg\n");
rtapi_print_msg(RTAPI_MSG_ALL, ": hal_spi init!!!!all\n");

There are plenty of error messages in the driver already.  I did not see any in the log however which makes me
suspect it was never loaded.
If insmod errors it should say why however and that was not in there either.

Instead of complicating things with loading a non working config, just to load the driver, try this in a terminal on your Pi

sudo > /var/log/linuxcnc.log (you may have to run this a root, it should zero the log)
DEBUG=5 realtime restart
halcmd loadrt hal_spi
halcmd show all
halrun -U

That should give you a short log and if it errors loading hal_spi will be easier to trace through

In addition to the log do

dmesg | tail > dmesg.log

and attach that log too


If you do and the driver should work, we can try to find out why it isn't.

If you don't, what the differences are from the BCM2837 for example, I have no idea

I am guessing you are trying to generate steps using the SPI, that is an area outside my experience
but there seems to be quite a bit about it on the RPi forums

Actually, I tought that hal_spi is used to write something to a MCU that will control the motor generating steps.
I think it sends the commanded velocity and the MCU updates the PWM.
I am not sure of those things, though

On 23/09/18 13:50, mngr wrote:


Il giorno domenica 23 settembre 2018 13:41:42 UTC+2, Schooner ha scritto:
The log does not show what your earlier email showed, there is not mention of an error from insmod

I think you need to get right back to basics.

This driver was written 5 years ago and is specific to the BCM2835 chip
It can only have been meant to support Pi v1 & v2 and maybe not all of them, as they kept changing versions and hardware,
because nothing of a higher version had been released then

Does this driver support your Pi?

In case of doubt I gave a look to wiringPi, it calls ioctl and write/reads from /dev/spidev.
Is calling that syscall from a hal driver a sane thing to do? (It is for example used here)

 
Regards DEBUG, the ini file bit was explained by the text you deleted from yours.
It takes a hexidecimal number up to 0x7FFFFFFF, the output is to terminal and the output is from NML messaging

The exported DEBUG=5 is the debug setting for logging and relates to the rtapi system, not NML

Thanks for the explanation, Schooner
 
On 23/09/18 11:07, mngr wrote:


Il giorno venerdì 21 settembre 2018 16:44:50 UTC+2, Schooner ha scritto:
You are not running with DEBUG=5

I edited DEBUG = 5 in ini file(in EMC section), nothing changed, then I exported DEBUG=5 in bash. what is the difference? what is the deBUG setting in the ini file for?

Attached you can find the ini and the hal file, I edited the CRAMPS configuration, basically removing everything relative to the PRU, and adding loadrt hal_spi in CRAMPS.hal (and leaving one only axis)
linuxcnc_old.log is everything before adding loadrt hal_spi.
linuxcnc.log is the execution with loadrt hal_spi and termila_output shows what has been written, I attached it because it talks about rtapi_rpc(): reply timeout, that is not mentioned in the log

pi@realtimepi:~ $ uname -a
Linux realtimepi 4.14.66-rt40-v7 #2 SMP PREEMPT RT Mon Sep 17 21:15:46 UTC 2018 armv7l GNU/Linux


 
Do so and your linuxcnc.log will have info as to what failed.

Also as I said in my last reply, it does not look as though you have a realtime kernel, irrespective of what you have named your pi.

On 21/09/18 15:31, mngr wrote:
Hi everyone,

I am sorry to post another noob question here, but,

I am trying to use the hal module hal_spi, shortly I tried with
loadrt hal_spi
in the hal file, but 
CRAMPS.hal:15: insmod failed, returned -1:
rtapi_rpc
(): reply timeout
See /var/log/linuxcnc.log for more information.

in the log
Sep 21 14:22:09 realtimepi msgd:0: startup pid=5979 flavor=posix rtlevel=1 usrlevel=1 halsize=524288 shm=Posix cc=gcc 6.3.0 20170516  version=unknown
Sep 21 14:22:09 realtimepi msgd:0: ØMQ=4.2.1 czmq=4.0.2 protobuf=3.0.0 atomics=gcc intrinsics    libwebsockets=2.0.3
Sep 21 14:22:09 realtimepi msgd:0: configured: sha=b87920504
Sep 21 14:22:09 realtimepi msgd:0: built:      Sep 18 2018 16:43:17 sha=b87920504
Sep 21 14:22:09 realtimepi msgd:0: register_stuff: actual hostname as announced by avahi='realtimepi.local'
Sep 21 14:22:09 realtimepi msgd:0: zeroconf: registering: 'Log service on realtimepi.local pid 5979'
Sep 21 14:22:10 realtimepi rtapi:0: rtapi_msgd went away, exiting
Sep 21 14:22:10 realtimepi msgd:0: zeroconf: registered 'Log service on realtimepi.local pid 5979' _machinekit._tcp 0 TXT "uuid=a42c8c6b-4025-4f83-ba28-dad21114744a" "instance=b9c730a2-bda9-11e8-bcc3-b827eb4bcf42" "service=log" "dsn=ipc:///tmp/0.log.a42c8c6b-4025-4f83-ba28-dad21114744a"

I tried launching machinekit without it and adding it later using halcmd loadrt hal_spi, but with similar results


should I give it some arguments? I don't know how to understand how to write them from the code...
Maybe the module is old and has lost some compatibility?

right now i am executing from
Linux realtimepi 4.14.69-v7+ #1141 SMP Mon Sep 10 15:26:29 BST 2018 armv7l GNU/Linux
Debian Stretch, Machinekit compiled from source
maybe should I explicit the path to hal_spi?

mngr
--
website: http://www.machinekit.io blog: http://blog.machinekit.io github: https://github.com/machinekit
---
You received this message because you are subscribed to the Google Groups "Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to machinekit+...@googlegroups.com.
Visit this group at https://groups.google.com/group/machinekit.
For more options, visit https://groups.google.com/d/optout.

--
website: http://www.machinekit.io blog: http://blog.machinekit.io github: https://github.com/machinekit
---
You received this message because you are subscribed to the Google Groups "Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to machinekit+...@googlegroups.com.
Visit this group at https://groups.google.com/group/machinekit.
For more options, visit https://groups.google.com/d/optout.

--
website: http://www.machinekit.io blog: http://blog.machinekit.io github: https://github.com/machinekit
---
You received this message because you are subscribed to the Google Groups "Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to machinekit+...@googlegroups.com.
Visit this group at https://groups.google.com/group/machinekit.
For more options, visit https://groups.google.com/d/optout.

--
website: http://www.machinekit.io blog: http://blog.machinekit.io github: https://github.com/machinekit
---
You received this message because you are subscribed to the Google Groups "Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to machinekit+...@googlegroups.com.
Visit this group at https://groups.google.com/group/machinekit.
For more options, visit https://groups.google.com/d/optout.

--
website: http://www.machinekit.io blog: http://blog.machinekit.io github: https://github.com/machinekit
---
You received this message because you are subscribed to the Google Groups "Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to machinekit+...@googlegroups.com.
Visit this group at https://groups.google.com/group/machinekit.
For more options, visit https://groups.google.com/d/optout.

--
website: http://www.machinekit.io blog: http://blog.machinekit.io github: https://github.com/machinekit
---
You received this message because you are subscribed to the Google Groups "Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to machinekit+...@googlegroups.com.
Visit this group at https://groups.google.com/group/machinekit.
For more options, visit https://groups.google.com/d/optout.

--
website: http://www.machinekit.io blog: http://blog.machinekit.io github: https://github.com/machinekit
---
You received this message because you are subscribed to the Google Groups "Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to machinekit+...@googlegroups.com.
Visit this group at https://groups.google.com/group/machinekit.
For more options, visit https://groups.google.com/d/optout.

--
website: http://www.machinekit.io blog: http://blog.machinekit.io github: https://github.com/machinekit
---
You received this message because you are subscribed to the Google Groups "Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to machinekit+...@googlegroups.com.
Visit this group at https://groups.google.com/group/machinekit.
For more options, visit https://groups.google.com/d/optout.

--
website: http://www.machinekit.io blog: http://blog.machinekit.io github: https://github.com/machinekit
---
You received this message because you are subscribed to the Google Groups "Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to machinekit+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/machinekit.
For more options, visit https://groups.google.com/d/optout.

--
website: http://www.machinekit.io blog: http://blog.machinekit.io github: https://github.com/machinekit
---
You received this message because you are subscribed to the Google Groups "Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to machinekit+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/machinekit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to