From: Maximilian K. <max...@gm...> - 2009-07-30 10:05:46
|
Hello again, there is something I forgot to ask in the other mail. It is about the driver of the pni11096 3-axis-magnetometer. Well, maybe I should start mentioning, that I read there should be a file called "spidev.h" in /include/linux/spi/ (something like that) which is not present in my OE (rev 318) in kernel v2.6.21 (nor in the others .22 and .24). Right.. so now to my problem: I call open() on the /dev/pni11096spi2.2 device, whiche works. Next I try a write which doesn't work but it shows an "Invalid argument" on the command line. <code> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/types.h> // compass device #define COMPASS_DEV "/dev/pni11096-spi2.2" int x_axis_command = 0x01; int g_spiFd = 0; int main( int argc, char* argv[]) { printf("Opening device\n"); g_spiFd = open( COMPASS_DEV, O_RDWR ); if (g_spiFd < 0) { perror("Couldn't open device"); exit( 1 ); } else { printf("Device opened %d\n", g_spiFd); } printf("Writing sequence %x\n", x_axis_command); if (write( g_spiFd, (void*) x_axis_command, sizeof( int ) ) < 0) { perror("Error during write"); } printf("Closing device\n"); close( g_spiFd ); exit( 0 ); } </code> Am I missing something, or doing something terribly wrong? greetings maximum |
From: Tuomas K. <tu...@ku...> - 2009-07-30 10:55:43
|
Maximilian Krickl wrote: > Hello again, > > there is something I forgot to ask in the other mail. > It is about the driver of the pni11096 3-axis-magnetometer. I have the same sensor. I tried quickly to port the driver to 2.6.26 but with little luck, so next I'll try the 2.6.24 from OE. > Well, maybe I should start mentioning, that I read there should be a > file called "spidev.h" in /include/linux/spi/ (something like that) > which is not present in my OE (rev 318) in kernel v2.6.21 (nor in the > others .22 and .24). I have the 2.6.24 with OE patches and I have the spidev.h there: linux-2.6$ find -name spidev.h ./include/linux/spi/spidev.h ./include/config/spi/spidev.h That seems to come from upstream kernel and not by any OE patch. -- Tuomas |
From: Tuomas K. <tu...@ku...> - 2009-07-31 17:33:52
|
Maximilian Krickl wrote: > Right.. so now to my problem: > > I call open() on the /dev/pni11096spi2.2 device, whiche works. Next I > try a write which doesn't work but it shows an "Invalid argument" on > the command line. If you are using the driver from there: http://docwiki.gumstix.org/index.php/Sample_code/C/SPI/kernel Then all you can write to that /dev/pni11096-spi2.2 device is ascii 'b', ascii 'h' or ascii 'd'. All other gives you EINVAL and a debug message to kernel log saying "expect [dec|hex|bin]". At least that's what the driver looks like. I got the driver loaded now with 2.6.24 but /proc/pni11096-spi2.2/stat just says "0 samples 0 overruns". I need to verify my connections. -- Tuomas |
From: Tuomas K. <tu...@ku...> - 2009-08-01 09:14:32
|
Tuomas Kulve wrote: > If you are using the driver from there: > http://docwiki.gumstix.org/index.php/Sample_code/C/SPI/kernel > > Then all you can write to that /dev/pni11096-spi2.2 device is ascii 'b', > ascii 'h' or ascii 'd'. All other gives you EINVAL and a debug message > to kernel log saying "expect [dec|hex|bin]". That's not right either. I think (now that I read the driver source code bit more carefully) you can't write anything to that /dev/pni11096-spi2.2, you can just read from it. All the controlling is done through the files under /proc/pni11096-spi2.2/. The driver itself seems to be working for me but I can't get any data from the sensor. -- Tuomas |
From: Maximilian K. <max...@gm...> - 2009-08-01 09:20:47
|
Hi Tuomas, > If you are using the driver from there: > http://docwiki.gumstix.org/index.php/Sample_code/C/SPI/kernel Yes, this is, where I took it. But as I don't know very much about programming drivers, I couldn't really read it ;-) > I got the driver loaded now with 2.6.24 but /proc/pni11096-spi2.2/stat > just says "0 samples 0 overruns". I need to verify my connections. Did you adjust the driver yourself, or did you get if from somewhere else? Greatings maximum |
From: Tuomas K. <tu...@ku...> - 2009-08-01 09:50:20
|
Maximilian Krickl wrote: >> I got the driver loaded now with 2.6.24 but /proc/pni11096-spi2.2/stat >> just says "0 samples 0 overruns". I need to verify my connections. > > Did you adjust the driver yourself, or did you get if from somewhere > else? I followed the instructions on the page, and changed couple of things to get it compiled. I'm trying this on verdex (pxa27x) and I think those instructions are hardcoded for pxa25x, so I changed e.g. ssp_type and clock_enable. But I'm not really sure if my changes are correct. -- Tuomas |
From: Tuomas K. <tu...@ku...> - 2009-08-01 12:50:03
|
Tuomas Kulve wrote: > Maximilian Krickl wrote: > >>> I got the driver loaded now with 2.6.24 but /proc/pni11096-spi2.2/stat >>> just says "0 samples 0 overruns". I need to verify my connections. I've mapped my mm3 pins to pxa270 gpios like this: MicroMag3: PXA270 1 = SCLK 19 = SSPSCLK2 (NSSPCLK) 2 = MISO 13 = SSPRXD2 (X_MISO) 3 = MOSI 11 = SSPTXD2 (X_MOSI) 4 = SS 28 = bit_clk 5 = DATA READY 29 = sdata_in 6 = RESET 30 = sdata_out 7 = GND I'm using AC97 port gpios 28,29, and 30 instead of the 66,67, and 77 gpios mentioned in the wiki since those are unused in my setup. I don't understand what the gpio 14 (SSPSFRM2) is for. Should I connect that to something? Thanks, -- Tuomas |
From: Maximilian K. <max...@gm...> - 2009-08-03 15:04:38
|
Hi Tuomas > I don't understand what the gpio 14 (SSPSFRM2) is for. Should I > connect > that to something? Afaik this is for a single chip select. But I'm not sure about that. btw. I am currently reading a book about programming drivers for linux. And the first thing I recognised looking at the pni11096 driver is, that there is no method for write. Now, do you know about any documentation for the controller driver api, or should I just take a look at the source code as it is self- explanatory :-D Greatings maximum |
From: Tuomas K. <tu...@ku...> - 2009-08-03 15:21:45
|
Maximilian Krickl wrote: > Hi Tuomas > >> I don't understand what the gpio 14 (SSPSFRM2) is for. Should I >> connect >> that to something? > > Afaik this is for a single chip select. But I'm not sure about that. > btw. I am currently reading a book about programming drivers for linux. > And the first thing I recognised looking at the pni11096 driver is, > that there is no method for write. You can read and write to /proc, but only read from /dev with this driver. With this driver there's is no way of directly sending commands to pni but I guess that's not needed. > Now, do you know about any documentation for the controller driver api, > or should I just take a look at the source code as it is self- > explanatory :-D The code isn't very self-explanatory as there's very little comments. If you want to send SPI commands to the pni yourself, you can also try http://docwiki.gumstix.org/index.php/Sample_code/C/SPI. Btw, what gumstix are you using? How have you connected the pni? I'm currently feeding it 5V and the SPI is 3.3V afaik. Is this a problem? The pni datasheet say that there should be different resistors for 5V and 3V DC but I guess the Sparkfun's board might be configured for 3V? -- Tuomas |
From: Maximilian K. <max...@gm...> - 2009-08-03 15:44:15
|
Hi, > With this driver there's is no way of directly sending commands > to pni but I guess that's not needed. Does the read method send the commands for all three axiis then, and returns the values from the mm3? > Btw, what gumstix are you using? I am using the gumstix verdex pro xm4 + breakout-vx + netWiFiSD. > How have you connected the pni? I'm currently feeding it 5V and the > SPI is 3.3V afaik. Is this a problem? Same over here. I think there should be a level converter between the connectors. regards maximum |
From: Tuomas K. <tu...@ku...> - 2009-08-03 16:33:10
|
Maximilian Krickl wrote: > Hi, > >> With this driver there's is no way of directly sending commands >> to pni but I guess that's not needed. > > Does the read method send the commands for all three axiis then, and > returns the values from the mm3? At least that's how I undersand it. This is from the wiki -page: "In binary mode size of the buffer is easy to figure: it's just the size of the data you expect from the device: 16 bytes for reading Robostix' ADC (8 16-bit values), 6 bytes for the other 2 devices (2 bytes per each of 3 axis)." And this is a clip of debug message I've added there: pni11096-spi spi2.0: 8 bits/word, 3250000 Hz, mode 3 pni11096-spi spi2.0: this_probe pni11096-spi spi2.0: cmd_init: axis: 0, command: 1 pni11096-spi spi2.0: cmd_init: axis: 1, command: 2 pni11096-spi spi2.0: cmd_init: axis: 2, command: 3 -- Tuomas |
From: Maximilian K. <max...@gm...> - 2009-08-05 08:21:07
|
Hi, Tuomas Kulve wrote: > And this is a clip of debug message I've added there: > > pni11096-spi spi2.0: 8 bits/word, 3250000 Hz, mode 3 > pni11096-spi spi2.0: this_probe > pni11096-spi spi2.0: cmd_init: axis: 0, command: 1 > pni11096-spi spi2.0: cmd_init: axis: 1, command: 2 > pni11096-spi spi2.0: cmd_init: axis: 2, command: 3 So you actually got it to work? regards maximum |
From: Maximilian K. <max...@gm...> - 2009-08-05 09:01:10
|
I forgot to ask something about the gpio pins > I'm using AC97 port gpios 28,29, and 30 instead of the 66,67, and 77 > gpios mentioned in the wiki since those are unused in my setup. How did you remap them? By changing the driver? Because I can't see any gpio stuff in the pni11096-spi.c Regards maximum |
From: Tuomas K. <tu...@ku...> - 2009-08-05 17:11:53
|
No, I didn't get it working yet. Maximilian Krickl wrote: > I forgot to ask something about the gpio pins > >> I'm using AC97 port gpios 28,29, and 30 instead of the 66,67, and 77 >> gpios mentioned in the wiki since those are unused in my setup. > > How did you remap them? By changing the driver? > Because I can't see any gpio stuff in the pni11096-spi.c This is what I'm trying: diff --git a/arch/arm/mach-pxa/gumstix.c b/arch/arm/mach-pxa/gumstix.c index 6d58f1a..f8eaf89 100644 --- a/arch/arm/mach-pxa/gumstix.c +++ b/arch/arm/mach-pxa/gumstix.c @@ -82,14 +82,14 @@ static void pni11096_cs_control(u32 command) { if (command & PXA2XX_CS_ASSERT) { - GPCR(67) = GPIO_bit(67); + GPCR(28) = GPIO_bit(28); if (command & PXA2XX_CS_RESET) { - GPSR(77) = GPIO_bit(77); - GPCR(77) = GPIO_bit(77); + GPSR(30) = GPIO_bit(30); + GPCR(30) = GPIO_bit(30); } } else - GPSR(67) = GPIO_bit(67); + GPSR(28) = GPIO_bit(28); } static @@ -168,7 +168,7 @@ struct spi_board_info gumstix_spi_board_info[] = { .bus_num = 2, .chip_select = 2, .controller_data = &pni11096_chip_info, - .irq = IRQ_GPIO(66), + .irq = IRQ_GPIO(29), .mode = SPI_MODE_3, }, #endif -- Tuomas |
From: Maximilian K. <max...@gm...> - 2009-10-04 08:12:04
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hello everybody, I tryed different things to get the driver working, but I failed. As I really need this working for my final thesis I now use the direct register access (memory map) to communicate with the PNI11096. I implemented the protocol myself and finally got it to work. So thanks for all your help. Kind Regards Maximum -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.12 (Darwin) iEYEARECAAYFAkrIWMcACgkQin4/Du0hqIpOzQCeNpK/60BndBUDux8laPgsWjIV 1c4An0cYazLfcSn1N+l62Qt6u6LZ1Mt+ =ljvK -----END PGP SIGNATURE----- |
From: Tuomas K. <tu...@ku...> - 2009-10-04 08:58:26
|
Maximilian Krickl wrote: > Hello everybody, > > I tryed different things to get the driver working, but I failed. > As I really need this working for my final thesis I now use the > direct register access (memory map) to communicate with the PNI11096. > I implemented the protocol myself and finally got it to work. Is that code somewhere publicly available? I might be interested to test it out :) -- Tuomas |