widora NEO更新源码后GPIO没法控制

代码如下 发现控制不了gpio 而且逻辑分析捕获的波形有规律但不是我想要的 而且SD卡不能用 是要设置什么东西才能用吗
!


#include <stdio.h>

int main(int argc,char** argv)
{
FILE* set_export;
int gpio_fd[4];

//打开设备节点
set_export = fopen ("/sys/class/gpio/export", "w");
if(set_export == NULL)printf ("Can't open /sys/class/gpio/export!\n");
else fprintf(set_export,"14");
fclose(set_export);
set_export = fopen ("/sys/class/gpio/export", "w");
if(set_export == NULL)printf ("Can't open /sys/class/gpio/export!\n");
else fprintf(set_export,"15");
fclose(set_export);
set_export = fopen ("/sys/class/gpio/export", "w");
if(set_export == NULL)printf ("Can't open /sys/class/gpio/export!\n");
else fprintf(set_export,"16");
fclose(set_export);
set_export = fopen ("/sys/class/gpio/export", "w");
if(set_export == NULL)printf ("Can't open /sys/class/gpio/export!\n");
else fprintf(set_export,"17");
fclose(set_export);

printf("enable gpio\n");

//设置成输出
set_export = fopen ("/sys/class/gpio/gpio14/direction", "w");
if(set_export == NULL)printf ("Can't open /sys/class/gpio/gpio14/direction!\n");
else fprintf(set_export,"out");
fclose(set_export);//设置
set_export = fopen ("/sys/class/gpio/gpio15/direction", "w");
if(set_export == NULL)printf ("Can't open /sys/class/gpio/gpio15/direction!\n");
else fprintf(set_export,"out");
fclose(set_export);//设置
set_export = fopen ("/sys/class/gpio/gpio16/direction", "w");
if(set_export == NULL)printf ("Can't open /sys/class/gpio/gpio16/direction!\n");
else fprintf(set_export,"out");
fclose(set_export);//设置
set_export = fopen ("/sys/class/gpio/gpio17/direction", "w");
if(set_export == NULL)printf ("Can't open /sys/class/gpio/gpio17/direction!\n");
else fprintf(set_export,"out");
fclose(set_export);//设置

printf("set gpio out\n");

gpio_fd[0] = open ("/sys/class/gpio/gpio14/value", O_RDWR);
gpio_fd[1] = open ("/sys/class/gpio/gpio15/value", O_RDWR);
gpio_fd[2] = open ("/sys/class/gpio/gpio16/value", O_RDWR);
gpio_fd[3] = open ("/sys/class/gpio/gpio17/value", O_RDWR);

while (1)
{
    write(gpio_fd[0],"1",1);
    write(gpio_fd[1],"1",1);
    write(gpio_fd[2],"1",1);
    write(gpio_fd[3],"1",1);
    usleep(100000);
    write(gpio_fd[0],"0",1);
    write(gpio_fd[1],"0",1);
    write(gpio_fd[2],"0",1);
    write(gpio_fd[3],"0",1);
    usleep(100000);
}
close(gpio_fd[0]);
close(gpio_fd[1]);
close(gpio_fd[2]);
close(gpio_fd[3]);

return 0;

}

问题有修复吗?

@mango 试了一下ubuntu编译出来的固件是没问题 应该是代码哪里被我改错了

@prince 这样你就核对一下IO模式是否正常

@mango !1521430868833-屏幕快照-2018-03-19-上午11.40.53.png

@mango 有一个reg的选项 选上试试

@mango !1521429425562-屏幕快照-2018-03-19-上午11.16.38.png

@prince 不可能吧,我们发布的固件,或是按照widora编译的肯定有这个

@mango 这个reg工具要在配置菜单里面打开吗 板子上没有reg这个命令

@prince
REG工具: http://wiki.widora.cn/reg
GPIO模式相关寄存器到7688 datasheet中找一下

@mango 这个不会读

@prince 有点奇怪哦,GPIO_MODE寄存器读出来看看

@prince uboot下貌似是正常的

!

@prince 选5

Please choose the operation:                                                    
   1: Load system code to SDRAM via TFTP.                                       
   2: Load system code then write to Flash via TFTP.                            
   3: Boot system code via Flash (default).                                     
   4: Entr boot command line interface.                                         
   5: Entr ALL LED test mode.                                                   
   6: Entr Web failsafe mode.                                                   
   7: Load Boot Loader code then write to Flash via Serial.                     
   9: Load Boot Loader code then write to Flash via TFTP.                       
 0   

进不了
!

@prince 进uboot,使用ledtest来测测

@mango 直接内存里面操作寄存器也不行

@mango 不能

@prince
记错了。bootstrap表:
!


!

首先,用wiki.widora.cn 里的命令,可以控制GPIO吗?