代码拉取完成,页面将自动刷新
同步操作将从 异想天开/openwrt_mt7688_ctest 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/*--------------------------------------------------------
This program is distributed under the GPL, version 2
Original Source: https://www.intra2net.com/en/developer/libftdi/
from:
www.intra2net.com 2003-2017 Intra2net AG
./openwrt-gcc -L. -lusb-1.0 -lftdi1 -o mpsse mpsse.c
Midas
------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "include/ftdi.h"
/*------------------------------------
write to GPIOH0 -GPIOH7
--------------------------------------*/
int mpsse_write_highbits(struct ftdi_context *ftdi, unsigned char val)
{
int ret;
unsigned char buf[3];
buf[0]=SET_BITS_HIGH;
buf[1]=val;
buf[2]=0xff;//1-out
ret = ftdi_write_data(ftdi, buf, 3);
if (ret < 0)
{
fprintf(stderr,"mpsse_write_highbits() write failed, error %d (%s)\n",ret, ftdi_get_error_string(ftdi));
}
return ret;
}
/*------------------------------------
write to GPIOL0 -GPIOL7
--------------------------------------*/
int mpsse_write_lowbits(struct ftdi_context *ftdi, unsigned char val)
{
int ret;
unsigned char buf[3];
buf[0]=SET_BITS_LOW;
buf[1]=val;
buf[2]=0xff;//1-out
ret = ftdi_write_data(ftdi, buf, 3);
if (ret < 0)
{
fprintf(stderr,"mpsse_write_lowbits() write failed, error %d (%s)\n",ret, ftdi_get_error_string(ftdi));
}
return ret;
}
int main(int argc, char **argv)
{
struct ftdi_context *ftdi;
int f,i;
unsigned char buf[2],val;
int retval = 0;
int k;
unsigned short usb_val;
int ret;
int baudrate;
struct timeval tm_start,tm_end;
int time_use;
if ((ftdi = ftdi_new()) == 0)
{
fprintf(stderr, "ftdi_new failed\n");
return EXIT_FAILURE;
}
f = ftdi_usb_open(ftdi, 0x0403, 0x6014); //VID and PID
if (f < 0 && f != -5)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(ftdi));
retval = 1;
goto done;
}
printf("ftdi open succeeded: %d\n",f);
printf("enabling bitbang mode\n");
ftdi_set_bitmode(ftdi, 0xFF, BITMODE_MPSSE);
usleep(500000);
//------ set baudrate -------
baudrate=3150000;
ret=ftdi_set_baudrate(ftdi,baudrate);
if(ret == -1){
printf("baudrate invalid!\n");
}
else if(ret != 0){
printf("ret=%d set baudrate fails!\n",ret);
}
else if(ret ==0 ){
printf("set baudrate=%d, actual baudrate=%d \n",baudrate,ftdi->baudrate);
}
//---------- run LED test ------
/*
val=0x01;
while(1){
mpsse_write_highbits(ftdi,~val);
mpsse_write_lowbits(ftdi,~val);
usleep(250000);
val=val<<1;
if(val==0) val=1;
}
*/
//-------- test GPIO speed ------
val=0x81;
while(1){
gettimeofday(&tm_start,NULL);
for(i=0;i<5*1024;i++){
val=~val;
mpsse_write_lowbits(ftdi,val);
}
gettimeofday(&tm_end,NULL);
time_use=(tm_end.tv_sec-tm_start.tv_sec)*1000+(tm_end.tv_usec-tm_start.tv_usec)/1000;
printf(" ------ finish transfering 5Kbytes data, time_use=%dms ----- \n",time_use); //~200ms for 1k bytes, ~1s for 5K bytes
}
/*
usb_val=0xAA00;
ret=libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE, SET_BITS_LOW,usb_val,ftdi->index, NULL, 0, ftdi->usb_write_timeout);
if(ret<0)
printf("libusb_control_transfer() to set mpsse SET_BITS_LOW fails! ret=%d\n",ret);
*/
// buf[0] = 0xFF;
//+++++
/*
k=0;
while(1){
if(k == 8) k=0;
buf[0]=0xFF-(1<<k);
k++;
f = ftdi_write_data(ftdi, buf, 1);
if (f < 0)
{
fprintf(stderr,"write failed for 0x%x%x, error %d (%s)\n",buf[0],buf[1],f, ftdi_get_error_string(ftdi));
}
else
printf(" write data buf=0x%02x to FTDI successfully!\n",buf[0]);
usleep(50000);
}
//-----
printf("turning everything on\n");
f = ftdi_write_data(ftdi, buf, 1);
if (f < 0)
{
fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(ftdi));
}
usleep(3 * 1000000);
buf[0] = 0xFF;
printf("turning everything off\n");
f = ftdi_write_data(ftdi, buf, 1);
if (f < 0)
{
fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(ftdi));
}
usleep(3 * 1000000);
for (i = 0; i < 32; i++)
{
buf[0] = 0 | (0xFF ^ 1 << (i % 8));
if ( i > 0 && (i % 8) == 0)
{
printf("\n");
}
printf("%02hhx ",buf[0]);
fflush(stdout);
f = ftdi_write_data(ftdi, buf, 1);
if (f < 0)
{
fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(ftdi));
}
usleep(1 * 1000000);
}
printf("\n");
*/
printf("disabling bitbang mode\n");
ftdi_disable_bitbang(ftdi);
ftdi_usb_close(ftdi);
done:
ftdi_free(ftdi);
return retval;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。