From: Norman W. <nen...@gm...> - 2010-10-25 20:49:53
|
Hi Markus, i have triggering on my scope and i send the message periodically in the test_program, plus i shortcut miso and mosi to receive the same value i send. instead i only get 0x00. the bits_per_word and max_speed_hz are set to 8, resp. 1000000 in my kernel driver, its only in the test program in the struct spi_transfer where i set them to NULL or 0 or commented them out, because some people wrote that they had issues with that. A bug or something... Thanks for your test-program though, i will definitely try that one tomorrow as well. Regards, Norman -------- Original-Nachricht -------- > Datum: Mon, 25 Oct 2010 16:39:05 -0400 > Von: Markus Svilans <msv...@ae...> > An: gum...@li... > Betreff: Re: [Gumstix-users] Gumstix Overo SPI read problems > Hi Norman, > > I never tried the spidev_test.c program yet. However I have some other > tips that may help. > > Instead I used my own program (code is attached). > > I installed the task-native-sdk package onto my Gumstix, and then used > the following command to build the program directly on the Gumstix: > > g++ -Wall test-spi.cc -o test-spi > > After I configured SPI in my kernel, as I outlined below for Will, I was > able to see activity on the SPI signal lines when reading and writing. > > In your case I would suggest trying bits_per_word=8 and > max_speed_hz=1000000 (1 million). I'm not sure what happens when you set > these to zero, but I imagine nothing useful. > > Now when you try to read and write from /dev/spidev1.0, you should see > the chip select line change and the clock line should have some pulses. > Also know that the clock will only have activity while you are > reading/writing. Since the SPI clock rate is in the MHz range, you > should enable triggering on your scope, otherwise you may not notice the > read/write events because they are so far. > > Markus. > > > > On 10-10-25 04:17 PM, nw236 wrote: > > Hi Will and Markus, > > > > I am working on the same problem right now actually. > > > > I have an Overo Air hooked up to a summit board and am building the same > > kernel-version like Will: linux-omap-2.6.34. > > > > I patched my kernel to disable ADS7846 and enable spidev and i see > > spidev1.0, but for some reason i cant see any signal when connecting the > > pins directly to a scope when i run the spidev_test program. Neither do > i > > receive the messages i send if i shortcut MISO and MOSI. > > > > Do you perhaps have any idea what could be the reason for that? I also > set > > max_speed_hz and bits_per_word to zero in my spidev_test program as > > suggested in some posts, nothing helped. > > > > Regards, > > Norman > > > > > > will2km wrote: > >> Hi Markus, > >> > >> Awsome! It's working now. One problem though, I wasn't able to > >> configure the modules by using "bitbake -c menuconfig > >> linux-omap3-2.6.34", a window popped up and disappeared very quickly. > >> So I had to manually change the defconfig file. > >> > >> But anyways, it's working. Thank you very much! > >> > >> > >> Regards, > >> > >> > >> Will > >> > >> Markus Svilans-2 wrote: > >>> On 10-10-05 02:19 PM, will2km wrote: > >>>> Hi Markus, > >>>> > >>>> Would you please give me a detailed walkthrough of how you > successfully > >>>> enable your SPI? I've tried all the methods I can find in this mail > list > >>>> but > >>>> none of them worked for me. > >>>> > >>>> Thank you so much. > >>>> > >>>> Regards, > >>>> > >>>> Will > >>>> > >>>> > >>> > >>> Hi Will, > >>> > >>> There are a number of steps involved to enable communication to your > SPI > >>> device. The information below is based on my own research, and > probably > >>> people more experienced than me with Linux and SPI will have some > >>> corrections and improvements to make. > >>> > >>> 1. You will have to make some configuration changes to your kernel. > Make > >>> sure the touchscreen is disabled (ADS7846). Make sure the spidev > module > >>> is enabled. You can reconfigure your kernel by using this command: > >>> > >>> bitbake -c menuconfig linux-omap3-2.6.34 > >>> > >>> (This assumes you are using the Linux 2.6.34 kernel.) > >>> > >>> This page on the Gumstix Wiki explains in more detail how to configure > >>> the kernel and rebuild it: > >>> http://gumstix.net/wiki/index.php?title=Kernel_Reconfiguration > >>> > >>> Note that you can use the '/' key to search for things in the > menuconfig > >>> program, e.g. the ADS7846 touchscreen. > >>> > >>> 2. Modify your board-overo.c file. The file is located here: > >>> > ${OVEROTOP}/tmp/work/overo-angstrom-linux-gnueabi/linux-omap3-2.6.34-r81/git/arch/arm/mach-omap2/board-overo.c > >>> > >>> There are two major changes to make. > >>> > >>> Change #1 > >>> At lines 73 and 74, I made the following changes: > >>> > >>> //#if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ > >>> // defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) > >>> #if 0 > >>> > >>> This basically disables the touchscreen stuff, even if you have them > >>> enabled in the kernel configuration. > >>> > >>> Change #2 > >>> Next, go to line 619. > >>> This is where you will provide information to the Linux kernel about > >>> your SPI device, so that it will allow you to communicate with it > using > >>> the open(), read() and write() system functions. > >>> > >>> In this section, I commented out the existing definitions, and added > my > >>> own. The changed file now looks like this: > >>> > >>> static struct spi_board_info overo_spi_board_info[] __initdata = { > >>> /* > >>> #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ > >>> defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) > >>> { > >>> .modalias = "ads7846", > >>> .bus_num = 1, > >>> .chip_select = 0, > >>> .max_speed_hz = 1500000, > >>> .controller_data =&ads7846_mcspi_config, > >>> .irq = OMAP_GPIO_IRQ(OVERO_GPIO_PENDOWN), > >>> .platform_data =&ads7846_config, > >>> }, > >>> #endif > >>> #if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \ > >>> defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE) > >>> { > >>> .modalias = "lgphilips_lb035q02_panel-spi", > >>> .bus_num = 1, > >>> .chip_select = 1, > >>> .max_speed_hz = 500000, > >>> .mode = SPI_MODE_3, > >>> }, > >>> #endif > >>> */ > >>> { // this is the part you need to add for your SPI device > >>> .modalias = "spidev", > >>> .bus_num = 1, > >>> .chip_select = 0, > >>> .max_speed_hz = 1000000, > >>> .mode = SPI_MODE_3 // clock starts high, and sampling is > done > >>> on rising edge > >>> } > >>> }; > >>> > >>> Some notes: > >>> * The "bus_num" parameter should be 1, if your SPI device is connected > >>> to the SPI pins on the 40-pin header on the Tobi and Summit boards. > The > >>> other parameters depend on the SPI device you want to communicate > with. > >>> * The "chip_select" parameter is sort of like the address of your SPI > >>> device. IIRC, the Gumstix Overo supports 3 different chip select > values, > >>> meaning you can have 3 SPI devices on the bus. > >>> * The "mode" parameter is explained in the kernel SPI documentation > (see > >>> link below). > >>> > >>> 3. Rebuild, install and boot your modified kernel. (See the Gumstix > Wiki > >>> page, mentioned above, for detailed info on this step.) > >>> > >>> 4. When you reboot, if all went well, you should be able to type "ls > >>> /dev" at the command prompt and see the new "spidev1.0" device in the > >>> listing. Now you should be able to use the open(), read() and write() > >>> system calls to send and receive data. > >>> > >>> > >>> As you can see, SPI communication is non-trivial compared to other > >>> methods, such as RS-232 or I2C for example. > >>> > >>> You should become familiar with the Linux kernel SPI documentation > >>> (http://www.mjmwired.net/kernel/Documentation/spi/spi-summary). There > >>> are various other parameters that you can use to configure spidev for > >>> your SPI device. There is also lots of useful background info on > spidev > >>> and its limitations. > >>> > >>> Hope this helps. I wouldn't mind knowing how it turned out for you. > >>> > >>> Best regards, > >>> Markus. > >>> > >>> > >>> > >>>> Markus Svilans-2 wrote: > >>>> > >>>>> Dear gumstix-users, > >>>>> > >>>>> I am trying to use SPI to read data from an ADS7476 analog to > digital > >>>>> converter. The sample rate will be slow, on the order of 10 to 100 > >>>>> samples per second. I would like to make the SPI device available > from > >>>>> user space, so that I can just read values from the A/D whenever > >>>>> needed. > >>>>> The timing requirements are loose enough that this should be ok. > >>>>> > >>>>> Data sheet for ADS7476: > >>>>> http://www.national.com/profile/snip.cgi/openDS=ADCS7476 > >>>>> > >>>>> In the SPI board info in board-overo.c, I have this: > >>>>> > >>>>> static struct spi_board_info overo_spi_board_info[] __initdata = { > >>>>> { > >>>>> .modalias = "spidev", > >>>>> .bus_num = 1, > >>>>> .chip_select = 0, > >>>>> .max_speed_hz = 1000000, > >>>>> } > >>>>> }; > >>>>> > >>>>> > >>>>> I commented out the entries for the various touchscreens (ADS7846, > >>>>> etc.). > >>>>> > >>>>> When I rebuilt the kernel and booted up, /dev/spi1.0 was present. So > >>>>> far > >>>>> so good. > >>>>> > >>>>> Next, I wrote a little C++ program to read 2 bytes (16 bit sample) > from > >>>>> /dev/spi1.0 at 1 second intervals. This was only partially > successful. > >>>>> There were 4 or 5 successful reads, and then read() returned -1, and > >>>>> perror() just said "Input/output error". Then a few more successful > >>>>> reads followed, and then another failed read. > >>>>> > >>>>> During this testing, the actual A/D was not present on the SPI bus. > I > >>>>> was using a scope to check that the Gumstix was generating the chip > >>>>> select and clock signals properly. > >>>>> > >>>>> Can anyone help determine why some SPI reads are failing? > >>>>> > >>>>> Many thanks, > >>>>> Markus. > >>>>> > >>>>> > >>>>> > ------------------------------------------------------------------------------ > >>>>> Start uncovering the many advantages of virtual appliances > >>>>> and start using them to simplify application deployment and > >>>>> accelerate your shift to cloud computing. > >>>>> http://p.sf.net/sfu/novell-sfdev2dev > >>>>> _______________________________________________ > >>>>> gumstix-users mailing list > >>>>> gum...@li... > >>>>> https://lists.sourceforge.net/lists/listinfo/gumstix-users > >>>>> > >>>>> > >>>>> > >>>> > >>> > >>> > ------------------------------------------------------------------------------ > >>> Beautiful is writing same markup. Internet Explorer 9 supports > >>> standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2& L3. > >>> Spend less time writing and rewriting code and more time creating > great > >>> experiences on the web. Be a part of the beta today. > >>> http://p.sf.net/sfu/beautyoftheweb > >>> _______________________________________________ > >>> gumstix-users mailing list > >>> gum...@li... > >>> https://lists.sourceforge.net/lists/listinfo/gumstix-users > >>> > >>> > >> > -- Neu: GMX De-Mail - Einfach wie E-Mail, sicher wie ein Brief! Jetzt De-Mail-Adresse reservieren: http://portal.gmx.net/de/go/demail |