From: Keith S. <ks...@cs...> - 2007-02-20 23:46:30
|
Hi, I am trying to get both SPI and I2C working on my Robostix/Gumstix. Following the directions on wiki, I can get I2C working with i2c-io, and I can also get SPI working with spi-io. However, if I try to run spi-io followed by i2c-io (or vice-versa), then both the I2C bus and the SPI bus hang, and requires a power cycle to rest both buses. A quick look through the code suggest that I should be able to access both busses at the same time, or am I missing something? Keith |
From: Andrei R. <po...@gm...> - 2007-02-20 23:52:55
|
Must be a bug somewhere. Could you give more details of how to reproduce the problem ? On 2/20/07, Keith Sullivan <ks...@cs...> wrote: > Hi, > > I am trying to get both SPI and I2C working on my Robostix/Gumstix. > Following the directions on wiki, I can get I2C working with i2c-io, > and I can also get SPI working with spi-io. However, if I try to run > spi-io followed by i2c-io (or vice-versa), then both the I2C bus and > the SPI bus hang, and requires a power cycle to rest both buses. A > quick look through the code suggest that I should be able to access > both busses at the same time, or am I missing something? > > Keith > > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > |
From: Dave H. <dhy...@gm...> - 2007-02-20 23:53:37
|
Hi Keith, > I am trying to get both SPI and I2C working on my Robostix/Gumstix. > Following the directions on wiki, I can get I2C working with i2c-io, > and I can also get SPI working with spi-io. However, if I try to run > spi-io followed by i2c-io (or vice-versa), then both the I2C bus and > the SPI bus hang, and requires a power cycle to rest both buses. A > quick look through the code suggest that I should be able to access > both busses at the same time, or am I missing something? I suspect that you can access both busses at the same time, but is the program running on the gumstix processing both busses? The i2c-io program only looks at the i2c bus. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Keith S. <ks...@cs...> - 2007-02-21 18:15:57
|
OK, here's what I did to lock up everything. After booting, I load the robostix_drv, i2c-dev, and i2c-pxa modules. Next, I rerun /etc/init.d/S25spi script. Then, i2c-io and spi-io work and produce similar results. However, if I place spi-io in a while loop at the command line, let it run, then control-c to kill the loop, both busses are locked. # while [ 1 ]; do > ./spi-io 2.0 get adc.0 > done 58 57 53 49 59 62 56 94 53 55 61 46 65 58 50 61 49 # ./i2c-io 0x0b get adc.0 i2c: error: timeout i2c: msg_num: 2 msg_idx: 0 msg_ptr: 1 i2c: ICR: 000017e8 ISR: 00000004 i2c: log: [00000044:000017e8] I2cTransfer: CRC failed: Rcvd: 0x00, expecting: 0x92 ERROR: I2C_IO_GetADC: I2cProcessBlock failed: Success (0) Segmentation fault # ./spi-io 2.0 get adc.0 I2cTransfer: ioctl failed: Input/output error (5) ERROR: I2C_IO_GetADC: I2cProcessBlock failed: Input/output error (5) Segmentation fault # On Tue, 2007-02-20 at 15:52 -0800, Andrei Rylin wrote: > Must be a bug somewhere. Could you give more details of how > to reproduce the problem ? > > On 2/20/07, Keith Sullivan <ks...@cs...> wrote: > > Hi, > > > > I am trying to get both SPI and I2C working on my Robostix/Gumstix. > > Following the directions on wiki, I can get I2C working with i2c-io, > > and I can also get SPI working with spi-io. However, if I try to run > > spi-io followed by i2c-io (or vice-versa), then both the I2C bus and > > the SPI bus hang, and requires a power cycle to rest both buses. A > > quick look through the code suggest that I should be able to access > > both busses at the same time, or am I missing something? > > > > Keith > > > > > > ------------------------------------------------------------------------- > > Take Surveys. Earn Cash. Influence the Future of IT > > Join SourceForge.net's Techsay panel and you'll get the chance to share your > > opinions on IT & business topics through brief surveys-and earn cash > > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > > _______________________________________________ > > gumstix-users mailing list > > gum...@li... > > https://lists.sourceforge.net/lists/listinfo/gumstix-users > > > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users |
From: Andrei R. <po...@gm...> - 2007-02-22 08:09:23
|
Yep, I see about the same. A bug. Will try to fix. On 2/21/07, Keith Sullivan <ks...@cs...> wrote: > OK, here's what I did to lock up everything. After booting, I load the > robostix_drv, i2c-dev, and i2c-pxa modules. Next, I > rerun /etc/init.d/S25spi script. Then, i2c-io and spi-io work and > produce similar results. However, if I place spi-io in a while loop at > the command line, let it run, then control-c to kill the loop, both > busses are locked. |
From: Dave H. <dhy...@gm...> - 2007-02-21 18:23:41
|
Hi Keith, On 2/21/07, Keith Sullivan <ks...@cs...> wrote: > OK, here's what I did to lock up everything. After booting, I load the > robostix_drv, i2c-dev, and i2c-pxa modules. Next, I > rerun /etc/init.d/S25spi script. Then, i2c-io and spi-io work and > produce similar results. However, if I place spi-io in a while loop at > the command line, let it run, then control-c to kill the loop, both > busses are locked. > > # while [ 1 ]; do > > ./spi-io 2.0 get adc.0 > > done > 58 > 57 > 53 ...snip... > # ./i2c-io 0x0b get adc.0 So presumably the program that you've got loaded on the robotstix at this point in time is the spi-io program, which I'm guessing doesn't do anything with the i2c bus. > ERROR: I2C_IO_GetADC: I2cProcessBlock failed: Success (0) > Segmentation fault The segmentation fault is a legitimate bug. Even if nobody is responding, it shouldn't cause a seg fault. Probably just a bug in an error reporting path that's never been tested. > # ./spi-io 2.0 get adc.0 > I2cTransfer: ioctl failed: Input/output error (5) > ERROR: I2C_IO_GetADC: I2cProcessBlock failed: Input/output error (5) > Segmentation fault Not sure about this one. Maybe it's just a problem with spi-io and doing the Control-C is leaving things in a bad state. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Andrei R. <po...@gm...> - 2007-02-21 19:08:43
|
Hi Keith, there are a few potential problems with what you're diong. This one particular command (get adc) blocks in Robostix until ADC gets its measurement. Unlike I2C, SPI slave doesn't have means of flow control (no "clock stretching" or similar). So unless SPI master makes sufficient pause between "get adc" command and actual read of the data, it risks getting junk. Even commands that do no block take some number of Robostix CPU clocks to execute, so if SPI master (Gumstix in this case) drives SPI transactions too fast there's a chance of getting junk. And it's more of a question of making sufficient pause between sending bytes than clock speed at which SPI bus is operated. If you look in robostix-spi driver code you'll find a few of time delays used during SPI transaction - one is a pause between sending bytes, another is pause between sending command and getting response. It's unfortunate they needed, but I have no better solution. That issue shall not cause any hangs though - just a junk. Another potential problem is that the program running in Robostix has two ways in (I2C and SPI), but both may lead to the same code that is _probably_ not re-entrant - so you can't actually do 'get adc' simultaneously thru I2C and SPI busses without being surprised. It's quite possible that there's a bug in robostix-spi driver such that 'control-c' actually leaves Robostix in some 'half-done' state. I'll see if I can reproduce the problem. -Andrei. Btw, I don't remember using/loading 'robostix_drv' - are you sure you need it to run i2c-io ? On 2/21/07, Keith Sullivan <ks...@cs...> wrote: > OK, here's what I did to lock up everything. After booting, I load the > robostix_drv, i2c-dev, and i2c-pxa modules. Next, I > rerun /etc/init.d/S25spi script. Then, i2c-io and spi-io work and > produce similar results. However, if I place spi-io in a while loop at > the command line, let it run, then control-c to kill the loop, both > busses are locked. > > # while [ 1 ]; do > > ./spi-io 2.0 get adc.0 > > done > 58 > 57 > 53 > 49 > 59 > 62 > 56 > 94 > 53 > 55 > 61 > 46 > 65 > 58 > 50 > 61 > 49 > > # ./i2c-io 0x0b get adc.0 > i2c: error: timeout > i2c: msg_num: 2 msg_idx: 0 msg_ptr: 1 > i2c: ICR: 000017e8 ISR: 00000004 > i2c: log: [00000044:000017e8] > I2cTransfer: CRC failed: Rcvd: 0x00, expecting: 0x92 > ERROR: I2C_IO_GetADC: I2cProcessBlock failed: Success (0) > Segmentation fault > # ./spi-io 2.0 get adc.0 > I2cTransfer: ioctl failed: Input/output error (5) > ERROR: I2C_IO_GetADC: I2cProcessBlock failed: Input/output error (5) > Segmentation fault > # > > > > > > > > On Tue, 2007-02-20 at 15:52 -0800, Andrei Rylin wrote: > > Must be a bug somewhere. Could you give more details of how > > to reproduce the problem ? > > > > On 2/20/07, Keith Sullivan <ks...@cs...> wrote: > > > Hi, > > > > > > I am trying to get both SPI and I2C working on my Robostix/Gumstix. > > > Following the directions on wiki, I can get I2C working with i2c-io, > > > and I can also get SPI working with spi-io. However, if I try to run > > > spi-io followed by i2c-io (or vice-versa), then both the I2C bus and > > > the SPI bus hang, and requires a power cycle to rest both buses. A > > > quick look through the code suggest that I should be able to access > > > both busses at the same time, or am I missing something? > > > > > > Keith > > > > > > > > > ------------------------------------------------------------------------- > > > Take Surveys. Earn Cash. Influence the Future of IT > > > Join SourceForge.net's Techsay panel and you'll get the chance to share your > > > opinions on IT & business topics through brief surveys-and earn cash > > > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > > > _______________________________________________ > > > gumstix-users mailing list > > > gum...@li... > > > https://lists.sourceforge.net/lists/listinfo/gumstix-users > > > > > > > ------------------------------------------------------------------------- > > Take Surveys. Earn Cash. Influence the Future of IT > > Join SourceForge.net's Techsay panel and you'll get the chance to share your > > opinions on IT & business topics through brief surveys-and earn cash > > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > > _______________________________________________ > > gumstix-users mailing list > > gum...@li... > > https://lists.sourceforge.net/lists/listinfo/gumstix-users > > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > |
From: Andrei R. <po...@gm...> - 2007-02-21 19:17:31
|
Btw, if you _need_ to get ADC (as opposed to testing/playing), either use i2c-io - not spi-io - OR get it by reading /dev/robostix-spi2.0 |
From: Dave H. <dhy...@gm...> - 2007-02-21 19:34:39
|
Hi guys, On 2/21/07, Andrei Rylin <po...@gm...> wrote: > Btw, if you _need_ to get ADC (as opposed to testing/playing), > either use i2c-io - not spi-io - OR get it by reading /dev/robostix-spi2.0 So the other thing that can be done is to incorporate some other ADC code I wrote for the AVR. You can find it over here: <http://websvn.hylands.org/listing.php?repname=Projects&path=%2Fcommon%2Favr%2F&rev=0&sc=0> in the adc.h and adc.c files. If CFG_ADC_POLL is set to 1 then you get behaviour similar to what is being seen today. If you set CFG_ADC_POLL to 0 then it uses the adc ISR to collect samples continuously in the background. Then the GetADC function could return "instantly". IIRC, at 16 MHz, the ISR collects samples approx 1200 times/channel/sec This rate could be increased by loosing some bits of precision. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Sterling P. <ste...@ga...> - 2007-02-22 16:29:43
|
> So the other thing that can be done is to incorporate some other ADC > code I wrote for the AVR. > > You can find it over here: > <http://websvn.hylands.org/listing.php?repname=Projects&path=%2Fcommon%2Fav >r%2F&rev=0&sc=0> > Can you translate that into a repository I can check out? > in the adc.h and adc.c files. If CFG_ADC_POLL is set to 1 then you get > behaviour similar to what is being seen today. If you set CFG_ADC_POLL > to 0 then it uses the adc ISR to collect samples continuously in the > background. Then the GetADC function could return "instantly". > > IIRC, at 16 MHz, the ISR collects samples approx 1200 times/channel/sec > > This rate could be increased by loosing some bits of precision. Sterling |
From: Dave H. <dhy...@gm...> - 2007-02-22 18:50:59
|
Hi Sterling, Sending to the list this time... On 2/22/07, Sterling Peet <ste...@ga...> wrote: > > > So the other thing that can be done is to incorporate some other ADC > > code I wrote for the AVR. > > > > You can find it over here: > > <http://websvn.hylands.org/listing.php?repname=Projects&path=%2Fcommon%2Fav > >r%2F&rev=0&sc=0> > > > > Can you translate that into a repository I can check out? Sure. You can grab the entire repository using: svn co http://svn.hylands.org projects -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Andrei R. <po...@gm...> - 2007-02-23 07:00:01
|
On 2/21/07, Dave Hylands <dhy...@gm...> wrote: > > # ./i2c-io 0x0b get adc.0 > > ERROR: I2C_IO_GetADC: I2cProcessBlock failed: Success (0) > > Segmentation fault > > The segmentation fault is a legitimate bug. Even if nobody is > responding, it shouldn't cause a seg fault. Probably just a bug in an > error reporting path that's never been tested. Segmentation fault is caused by LogError() in ProcessGetCommand() in i2c-io.c There are two LogErrors there, both are incorrect. That was easy part, I keep looking for the root cause of the problem. Btw, what's 'legitimate bug' ? |
From: Dave H. <dhy...@gm...> - 2007-02-23 08:00:21
|
Hi Andrei, > Segmentation fault is caused by LogError() in ProcessGetCommand() > in i2c-io.c There are two LogErrors there, both are incorrect. Fixed - thanks. > That was easy part, I keep looking for the root cause of the problem. > Btw, what's 'legitimate bug' ? Well, it's a bug in the code I wrote, as opposed to something like a mismatch between uClibc that the program was compiled against versus the one on the gumstix - but I see your point. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |