当前位置: 首页 > news >正文

广州航海学院门户网站鹰手营子矿网站建设

广州航海学院门户网站,鹰手营子矿网站建设,wordpress主页乱码,做美食网站的需求分析同i2c-tools工具类似#xff0c;spidev_test是用来测试SPI BUS的用户态程序#xff0c;其源码存在kernel目录下的tools下#xff0c;具体为tools\spi\spidev_test.c。buildroot同样也提供名为spidev_test的package#xff0c;可以直接进行编译#xff0c;方便用户调试spi总…同i2c-tools工具类似spidev_test是用来测试SPI BUS的用户态程序其源码存在kernel目录下的tools下具体为tools\spi\spidev_test.c。buildroot同样也提供名为spidev_test的package可以直接进行编译方便用户调试spi总线。 一、spidev_test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/spi/ 二、spi-tools https://github.com/cpb-/spi-tools spidev_test.c开源代码 // SPDX-License-Identifier: GPL-2.0-only /** SPI testing utility (using spidev driver)** Copyright (c) 2007 MontaVista Software, Inc.* Copyright (c) 2007 Anton Vorontsov avorontsovru.mvista.com** Cross-compile with cross-gcc -I/path/to/cross-kernel/include*/#include stdint.h #include unistd.h #include stdio.h #include stdlib.h #include string.h #include errno.h #include getopt.h #include fcntl.h #include time.h #include sys/ioctl.h #include linux/ioctl.h #include sys/stat.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) {if (errno ! 0)perror(s);elseprintf(%s\n, s);abort(); }static const char *device /dev/spidev1.1; static uint32_t mode; static uint8_t bits 8; static char *input_file; static char *output_file; static uint32_t speed 500000; static uint16_t delay; static int verbose; static int transfer_size; static int iterations; static int interval 5; /* interval in seconds for showing transfer rate */static uint8_t default_tx[] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0x40, 0x00, 0x00, 0x00, 0x00, 0x95,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xF0, 0x0D, };static uint8_t default_rx[ARRAY_SIZE(default_tx)] {0, }; static char *input_tx;static void hex_dump(const void *src, size_t length, size_t line_size,char *prefix) {int i 0;const unsigned char *address src;const unsigned char *line address;unsigned char c;printf(%s | , prefix);while (length-- 0) {printf(%02X , *address);if (!(i % line_size) || (length 0 i % line_size)) {if (length 0) {while (i % line_size)printf(__ );}printf( |);while (line address) {c *line;printf(%c, (c 32 || c 126) ? . : c);}printf(|\n);if (length 0)printf(%s | , prefix);}} }/** Unescape - process hexadecimal escape character* converts shell input \x23 - 0x23*/ static int unescape(char *_dst, char *_src, size_t len) {int ret 0;int match;char *src _src;char *dst _dst;unsigned int ch;while (*src) {if (*src \\ *(src1) x) {match sscanf(src 2, %2x, ch);if (!match)pabort(malformed input string);src 4;*dst (unsigned char)ch;} else {*dst *src;}ret;}return ret; }static void transfer(int fd, uint8_t const *tx, uint8_t const *rx, size_t len) {int ret;int out_fd;struct spi_ioc_transfer tr {.tx_buf (unsigned long)tx,.rx_buf (unsigned long)rx,.len len,.delay_usecs delay,.speed_hz speed,.bits_per_word bits,};if (mode SPI_TX_OCTAL)tr.tx_nbits 8;else if (mode SPI_TX_QUAD)tr.tx_nbits 4;else if (mode SPI_TX_DUAL)tr.tx_nbits 2;if (mode SPI_RX_OCTAL)tr.rx_nbits 8;else if (mode SPI_RX_QUAD)tr.rx_nbits 4;else if (mode SPI_RX_DUAL)tr.rx_nbits 2;if (!(mode SPI_LOOP)) {if (mode (SPI_TX_OCTAL | SPI_TX_QUAD | SPI_TX_DUAL))tr.rx_buf 0;else if (mode (SPI_RX_OCTAL | SPI_RX_QUAD | SPI_RX_DUAL))tr.tx_buf 0;}ret ioctl(fd, SPI_IOC_MESSAGE(1), tr);if (ret 1)pabort(cant send spi message);if (verbose)hex_dump(tx, len, 32, TX);if (output_file) {out_fd open(output_file, O_WRONLY | O_CREAT | O_TRUNC, 0666);if (out_fd 0)pabort(could not open output file);ret write(out_fd, rx, len);if (ret ! len)pabort(not all bytes written to output file);close(out_fd);}if (verbose)hex_dump(rx, len, 32, RX); }static void print_usage(const char *prog) {printf(Usage: %s [-DsbdlHOLC3vpNR24SI]\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 -i --input input data from a file (e.g. \test.bin\)\n -o --output output data to a file (e.g. \results.bin\)\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 -v --verbose Verbose (show tx buffer)\n -p Send data (e.g. \1234\\xde\\xad\)\n -N --no-cs no chip select\n -R --ready slave pulls low to pause\n -2 --dual dual transfer\n -4 --quad quad transfer\n -8 --octal octal transfer\n -S --size transfer size\n -I --iter iterations\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 },{ input, 1, 0, i },{ output, 1, 0, o },{ 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 },{ dual, 0, 0, 2 },{ verbose, 0, 0, v },{ quad, 0, 0, 4 },{ octal, 0, 0, 8 },{ size, 1, 0, S },{ iter, 1, 0, I },{ NULL, 0, 0, 0 },};int c;c getopt_long(argc, argv, D:s:d:b:i:o:lHOLC3NR248p:vS:I:,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 i:input_file optarg;break;case o:output_file 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 v:verbose 1;break;case R:mode | SPI_READY;break;case p:input_tx optarg;break;case 2:mode | SPI_TX_DUAL;break;case 4:mode | SPI_TX_QUAD;break;case 8:mode | SPI_TX_OCTAL;break;case S:transfer_size atoi(optarg);break;case I:iterations atoi(optarg);break;default:print_usage(argv[0]);}}if (mode SPI_LOOP) {if (mode SPI_TX_DUAL)mode | SPI_RX_DUAL;if (mode SPI_TX_QUAD)mode | SPI_RX_QUAD;if (mode SPI_TX_OCTAL)mode | SPI_RX_OCTAL;} }static void transfer_escaped_string(int fd, char *str) {size_t size strlen(str);uint8_t *tx;uint8_t *rx;tx malloc(size);if (!tx)pabort(cant allocate tx buffer);rx malloc(size);if (!rx)pabort(cant allocate rx buffer);size unescape((char *)tx, str, size);transfer(fd, tx, rx, size);free(rx);free(tx); }static void transfer_file(int fd, char *filename) {ssize_t bytes;struct stat sb;int tx_fd;uint8_t *tx;uint8_t *rx;if (stat(filename, sb) -1)pabort(cant stat input file);tx_fd open(filename, O_RDONLY);if (tx_fd 0)pabort(cant open input file);tx malloc(sb.st_size);if (!tx)pabort(cant allocate tx buffer);rx malloc(sb.st_size);if (!rx)pabort(cant allocate rx buffer);bytes read(tx_fd, tx, sb.st_size);if (bytes ! sb.st_size)pabort(failed to read input file);transfer(fd, tx, rx, sb.st_size);free(rx);free(tx);close(tx_fd); }static uint64_t _read_count; static uint64_t _write_count;static void show_transfer_rate(void) {static uint64_t prev_read_count, prev_write_count;double rx_rate, tx_rate;rx_rate ((_read_count - prev_read_count) * 8) / (interval*1000.0);tx_rate ((_write_count - prev_write_count) * 8) / (interval*1000.0);printf(rate: tx %.1fkbps, rx %.1fkbps\n, rx_rate, tx_rate);prev_read_count _read_count;prev_write_count _write_count; }static void transfer_buf(int fd, int len) {uint8_t *tx;uint8_t *rx;int i;tx malloc(len);if (!tx)pabort(cant allocate tx buffer);for (i 0; i len; i)tx[i] random();rx malloc(len);if (!rx)pabort(cant allocate rx buffer);transfer(fd, tx, rx, len);_write_count len;_read_count len;if (mode SPI_LOOP) {if (memcmp(tx, rx, len)) {fprintf(stderr, transfer error !\n);hex_dump(tx, len, 32, TX);hex_dump(rx, len, 32, RX);exit(1);}}free(rx);free(tx); }int main(int argc, char *argv[]) {int ret 0;int fd;parse_opts(argc, argv);if (input_tx input_file)pabort(only one of -p and --input may be selected);fd open(device, O_RDWR);if (fd 0)pabort(cant open device);/** spi mode*/ret ioctl(fd, SPI_IOC_WR_MODE32, mode);if (ret -1)pabort(cant set spi mode);ret ioctl(fd, SPI_IOC_RD_MODE32, mode);if (ret -1)pabort(cant get spi mode);/** bits per word*/ret ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, bits);if (ret -1)pabort(cant set bits per word);ret ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, bits);if (ret -1)pabort(cant get bits per word);/** max speed hz*/ret ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, speed);if (ret -1)pabort(cant set max speed hz);ret ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, speed);if (ret -1)pabort(cant get max speed hz);printf(spi mode: 0x%x\n, mode);printf(bits per word: %u\n, bits);printf(max speed: %u Hz (%u kHz)\n, speed, speed/1000);if (input_tx)transfer_escaped_string(fd, input_tx);else if (input_file)transfer_file(fd, input_file);else if (transfer_size) {struct timespec last_stat;clock_gettime(CLOCK_MONOTONIC, last_stat);while (iterations-- 0) {struct timespec current;transfer_buf(fd, transfer_size);clock_gettime(CLOCK_MONOTONIC, current);if (current.tv_sec - last_stat.tv_sec interval) {show_transfer_rate();last_stat current;}}printf(total: tx %.1fKB, rx %.1fKB\n,_write_count/1024.0, _read_count/1024.0);} elsetransfer(fd, default_tx, default_rx, sizeof(default_tx));close(fd);return ret; }https://blog.csdn.net/qq_41495871/article/details/100584284 https://www.cnblogs.com/sankye/p/3955630.html https://blog.csdn.net/weixin_40407893/article/details/102461906?spm1001.2101.3001.6650.2utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-102461906-blog-132819200.235%5Ev38%5Epc_relevant_anti_vipdepth_1-utm_sourcedistribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-102461906-blog-132819200.235%5Ev38%5Epc_relevant_anti_viputm_relevant_index5 spidev_fdx.c // SPDX-License-Identifier: GPL-2.0 #include stdio.h #include unistd.h #include stdlib.h #include fcntl.h #include string.h#include sys/ioctl.h #include sys/types.h #include sys/stat.h#include linux/types.h #include linux/spi/spidev.hstatic int verbose;static void do_read(int fd, int len) {unsigned char buf[32], *bp;int status;/* read at least 2 bytes, no more than 32 */if (len 2)len 2;else if (len sizeof(buf))len sizeof(buf);memset(buf, 0, sizeof buf);status read(fd, buf, len);if (status 0) {perror(read);return;}if (status ! len) {fprintf(stderr, short read\n);return;}printf(read(%2d, %2d): %02x %02x,, len, status,buf[0], buf[1]);status - 2;bp buf 2;while (status-- 0)printf( %02x, *bp);printf(\n); }static void do_msg(int fd, int len) {struct spi_ioc_transfer xfer[2];unsigned char buf[32], *bp;int status;memset(xfer, 0, sizeof xfer);memset(buf, 0, sizeof buf);if (len sizeof buf)len sizeof buf;buf[0] 0xaa;xfer[0].tx_buf (unsigned long)buf;xfer[0].len 1;xfer[1].rx_buf (unsigned long) buf;xfer[1].len len;status ioctl(fd, SPI_IOC_MESSAGE(2), xfer);if (status 0) {perror(SPI_IOC_MESSAGE);return;}printf(response(%2d, %2d): , len, status);for (bp buf; len; len--)printf( %02x, *bp);printf(\n); }static void dumpstat(const char *name, int fd) {__u8 lsb, bits;__u32 mode, speed;if (ioctl(fd, SPI_IOC_RD_MODE32, mode) 0) {perror(SPI rd_mode);return;}if (ioctl(fd, SPI_IOC_RD_LSB_FIRST, lsb) 0) {perror(SPI rd_lsb_fist);return;}if (ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, bits) 0) {perror(SPI bits_per_word);return;}if (ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, speed) 0) {perror(SPI max_speed_hz);return;}printf(%s: spi mode 0x%x, %d bits %sper word, %d Hz max\n,name, mode, bits, lsb ? (lsb first) : , speed); }int main(int argc, char **argv) {int c;int readcount 0;int msglen 0;int fd;const char *name;while ((c getopt(argc, argv, hm:r:v)) ! EOF) {switch (c) {case m:msglen atoi(optarg);if (msglen 0)goto usage;continue;case r:readcount atoi(optarg);if (readcount 0)goto usage;continue;case v:verbose;continue;case h:case ?: usage:fprintf(stderr,usage: %s [-h] [-m N] [-r N] /dev/spidevB.D\n,argv[0]);return 1;}}if ((optind 1) ! argc)goto usage;name argv[optind];fd open(name, O_RDWR);if (fd 0) {perror(open);return 1;}dumpstat(name, fd);if (msglen)do_msg(fd, msglen);if (readcount)do_read(fd, readcount);close(fd);return 0; }2、编译成可执行文件后测试 spidev_test Usage: spidev_test [-DsbdlHOLC3vpNR24SI]-D --device device to use (default /dev/spidev1.1)-s --speed max speed (Hz)-d --delay delay (usec)-b --bpw bits per word-i --input input data from a file (e.g. test.bin)-o --output output data to a file (e.g. results.bin)-l --loop loopback-H --cpha clock phase-O --cpol clock polarity-L --lsb least significant bit first-C --cs-high chip select active high-3 --3wire SI/SO signals shared-v --verbose Verbose (show tx buffer)-p Send data (e.g. 1234\xde\xad)-N --no-cs no chip select-R --ready slave pulls low to pause-2 --dual dual transfer-4 --quad quad transfer-S --size transfer size-I --iter iterationsspidev_test -D /dev/spidev1.0 -s 5000 -p \x48\x00\x00\x00 -vspi mode: 0x0 bits per word: 8 max speed: 5000 Hz (5 KHz) TX | 48 00 00 00 __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ | H... RX | 00 00 00 00 __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ | ....
http://www.dnsts.com.cn/news/150694.html

相关文章:

  • 小型网站项目策划书dw建设个人网站步骤
  • 济南网站设计开发广西的网络公司
  • 南宁企业建站系统大通证券手机版下载官方网站下载
  • 代理IP做网站企业如何建设网站
  • 一个网站专门做摩托车做网站多少钱_西宁君博相约
  • 学习网站建设与管理外卖网站建设的策划书
  • 常见的站内推广方式有哪几种可以做网站引导页的页面
  • 阿里云做网站步骤吉林seo刷关键词排名优化
  • 做暧暧暖免费观看网站wordpress 查询页面
  • 网站建设ftp软件有哪些wordpress网站导入
  • wordpress网站源码分享中国足彩网竞彩推荐
  • 网站快速排名的方法阳江网红打卡地方
  • 做网站的公司如何推广网页设计培训课程哪家好
  • visual studio怎么新建网站网址你懂我意思正能量晚上免费软件下载
  • 苏州网站建设制作公司小程序开发品牌建设是指
  • 做网站建设科技公司抚州seo快速排名
  • 国内炫酷的网站设计网站开发英文论文
  • 淘宝网站是谁做的好制作app页面的软件
  • 方一凡和磊儿做家教的网站网站诊断书
  • 学设计网站代做计算机毕业设计网站
  • 微信团购群网站怎样做网站开发的基本流程文库
  • 网站内容管理系统如何做网站内链
  • 商业网站图片网站模板建设教程
  • 数据网站有哪些百度关键词怎么刷上去
  • 方案网站有哪些百度推广电话号码
  • 郑州建站优化标志在线设计网站
  • 国外专业做汽配的网站宠物网站设计的代码
  • 网站空间邮箱网站转移空间备案是不是就没有了
  • 织梦cms网站温州市建设工程信息网
  • 进地铁建设公司网站wordpress主题不一样