Test the application code of the SPI test in Linux

Source: Internet
Author: User

Mail: bookworepeng@Hotmail.com

QQ: 196568501

Author: drivermonkey

Phone: 13410905075

Tested hardware platform: Ti am335x

Test code:

/* * SPI testing utility (using spidev driver) * * Copyright (c) 2007  MontaVista Software, Inc. * Copyright (c) 2007  Anton Vorontsov <avorontsov@ru.mvista.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License. * * Cross-compile with cross-gcc -I/path/to/cross-kernel/include */#include <stdint.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <getopt.h>#include <fcntl.h>#include <sys/ioctl.h>#include <linux/types.h>#include <linux/spi/spidev.h>#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))static void pabort(const char *s){perror(s);abort();}static const char *device = "/dev/spidev1.1";static uint8_t mode;static uint8_t bits = 8;static uint32_t speed = 500000;static uint16_t delay;uint8_t tx[4096] = {0};uint8_t rx[ARRAY_SIZE(tx)] = {0, };static void transfer(int fd){int ret;struct spi_ioc_transfer tr = {.tx_buf = (unsigned long)tx,.rx_buf = (unsigned long)rx,.len = ARRAY_SIZE(tx),.delay_usecs = delay,.speed_hz = speed,.bits_per_word = bits,};ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);if (ret < 1)pabort("can't send spi message");//for (ret = 0; ret < ARRAY_SIZE(tx); ret++) {//if (!(ret % 6))//puts("");//printf("%.2X ", rx[ret]);//}puts("");}static void print_usage(const char *prog){printf("Usage: %s [-DsbdlHOLC3]\n", prog);puts("  -D --device   device to use (default /dev/spidev1.1)\n"     "  -s --speed    max speed (Hz)\n"     "  -d --delay    delay (usec)\n"     "  -b --bpw      bits per word \n"     "  -l --loop     loopback\n"     "  -H --cpha     clock phase\n"     "  -O --cpol     clock polarity\n"     "  -L --lsb      least significant bit first\n"     "  -C --cs-high  chip select active high\n"     "  -3 --3wire    SI/SO signals shared\n");exit(1);}static void parse_opts(int argc, char *argv[]){while (1) {static const struct option lopts[] = {{ "device",  1, 0, 'D' },{ "speed",   1, 0, 's' },{ "delay",   1, 0, 'd' },{ "bpw",     1, 0, 'b' },{ "loop",    0, 0, 'l' },{ "cpha",    0, 0, 'H' },{ "cpol",    0, 0, 'O' },{ "lsb",     0, 0, 'L' },{ "cs-high", 0, 0, 'C' },{ "3wire",   0, 0, '3' },{ "no-cs",   0, 0, 'N' },{ "ready",   0, 0, 'R' },{ NULL, 0, 0, 0 },};int c;c = getopt_long(argc, argv, "D:s:d:b:lHOLC3NR", lopts, NULL);if (c == -1)break;switch (c) {case 'D':device = optarg;break;case 's':speed = atoi(optarg);break;case 'd':delay = atoi(optarg);break;case 'b':bits = atoi(optarg);break;case 'l':mode |= SPI_LOOP;break;case 'H':mode |= SPI_CPHA;break;case 'O':mode |= SPI_CPOL;break;case 'L':mode |= SPI_LSB_FIRST;break;case 'C':mode |= SPI_CS_HIGH;break;case '3':mode |= SPI_3WIRE;break;case 'N':mode |= SPI_NO_CS;break;case 'R':mode |= SPI_READY;break;default:print_usage(argv[0]);break;}}}int main(int argc, char *argv[]){int err = 0;unsigned char cmd = 32;unsigned int mode = 0;int handle_spi1dev = 0;int ret = 0;printf("init_SPI1()++\n");printf("handle_spi1dev = %x \n", handle_spi1dev);handle_spi1dev = open("/dev/spidev1.0",O_RDWR);if(handle_spi1dev < 0){printf("/dev/spidev1.0 error \n");}mode = SPI_CPHA;err = ioctl(handle_spi1dev, SPI_IOC_WR_BITS_PER_WORD,&cmd);//change spi to 32bits modeif (err == -1)printf("can't set spi mode\n");err = ioctl(handle_spi1dev, SPI_IOC_WR_MODE, &mode);if (err == -1)printf("can't set spi mode\n");printf("handle_spi1dev = %x \n", handle_spi1dev);printf("init_SPI1()--\n");transfer(handle_spi1dev);close(handle_spi1dev);return ret;}

Test results:

Currently, the SPI Driver Interface transfers up to 4 K bytes of data at a time.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.