2.2、串口
FETMX6ULL-C核心板原生支持8路UART通讯,接口丰富可以多路多种协议传感器信息采集。
代码程序:
/*forlinx serial port test*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define msleep(n) usleep(n*1000)
char* dev = NULL;
char* baudrate = NULL;
pthread_mutex_t mut;
fd_set rd;
int nread,retval;
unsigned char msg[32];
unsigned char buffer[9];
struct timeval timeout={0,100};
unsigned long recvTotal=0;
volatile pthread_t thread[2];
volatile const int READ_THREAD_ID = 0;
volatile const int SEND_THREAD_ID = 1;
volatile int COM_READ_STATU = 1;
volatile int COM_SEND_STATU = 1;
volatile int sendnum=1,sendnum_times=0,recenum=1,recenum_times=0,cornum=0,cornum_times=0;
static speed_t getBaudrate(int baudrate)
{
switch(baudrate) {
case 0: return B0;
case 50: return B50;
case 75: return B75;
case 110: return B110;
case 134: return B134;
case 150: return B150;
case 200: return B200;
case 300: return B300;
case 600: return B600;
case 1200: return B1200;
case 1800: return B1800;
case 2400: return B2400;
case 4800: return B4800;
case 9600: return B9600;
case 19200: return B19200;
case 38400: return B38400;
case 57600: return B57600;
case 115200: return B115200;
case 230400: return B230400;
case 460800: return B460800;
case 500000: return B500000;
case 576000: return B576000;
case 921600: return B921600;
case 1000000: return B1000000;
case 1152000: return B1152000;
case 1500000: return B1500000;
case 2000000: return B2000000;
case 2500000: return B2500000;
case 3000000: return B3000000;
case 3500000: return B3500000;
case 4000000: return B4000000;
default: return -1;
}
}
int OpenDev(char *Dev)
{
speed_t speed;
int i=0;
int fdt,c=0,num;
struct termios oldtio,newtio;
speed = getBaudrate(atoi(baudrate));
fdt=open(Dev,O_RDWR | O_NONBLOCK| O_NOCTTY | O_NDELAY);
if(fdt<0)
{
perror(Dev);
exit(1);
}
//save to oldtio
tcgetattr(fdt,&oldtio);
//clear newtio
bzero(&newtio,sizeof(newtio));
//newtio.c_cflag = speed|CS8|CLOCAL|CREAD|CRTSCTS;
newtio.c_cflag = speed|CS8|CLOCAL|CREAD;
// newtio.c_cflag &= ~CSIZE;
newtio.c_cflag &= ~CSTOPB;
newtio.c_cflag &= ~PARENB;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
//printf("newtio.c_cflag=%x\n",newtio.c_cflag);
tcflush(fdt,TCIFLUSH);
tcsetattr(fdt,TCSANOW,&newtio);
tcgetattr(fdt,&oldtio);
//printf("oldtio.c_cflag=%x\n",oldtio.c_cflag);
return fdt;
}
void read_port(void)
{
int i=0,j = 1,num_read;
FD_ZERO(&rd);
FD_SET(fd,&rd);
// timeout.tv_sec = 1;
// timeout.tv_usec = 0;
retval = select (fd+1,&rd,NULL,NULL,&timeout);
switch (retval)
{
case 0:
// printf("no data input within 1s.\n");
break;
case -1:
perror("select");
break;
default:
if((nread=read(fd,msg,sizeof(msg)))>0)
{
recvTotal+=strlen(msg);
printf("recvTotal=%4ld num = %2d recv = %s \n",recvTotal,recenum,msg);
printf("hex:");
for(i=0;i0)
{}
else
{
printf("Can't Open Serial Port %s \n",dev);
exit(0);
}
printf("\nWelcome to TTYtest! Press Ctrl + 'c' to stop.\n\n");
pthread_mutex_init(&mut,NULL);
// funct_select();
if(start_thread_func(com_read, (pthread_t*)&thread[READ_THREAD_ID], (int *)&COM_READ_STATU, (int *)&COM_READ_STATU) != 0)
{
printf("error to leave\n");
return -1;
}
if(start_thread_func(com_send, (pthread_t*)&thread[SEND_THREAD_ID], (int *)&COM_SEND_STATU, (int *)&COM_SEND_STATU) != 0)
{
printf("error to leave\n");
return -1;
}
while(1)
{ }
}
2.2 CAN通讯
2路CAN通讯,FETMX6ULL-C的CAN应该是早期的CAN通讯,不是近年出的CANFD。
运行以下命令,设置can总线设备的波特率等信息,并且使能can总线设备。
#设置can0
sudo ip link set can0 type can bitrate 1000000;sudo ip link set can0 up
#设置can1
sudo ip link set can1 type can bitrate 1000000;sudo ip link set can1 up
#获取can数据
candump can0
#获取can数据
candump can1
使用CAN工具发送数据,imx6ull接收并显示。
2.3 音频视频播放播放
SAI 接口(串行音频接口)适用于许多立体声或单声道应用。例如,它可配置为支持 I2S 标准、LSB 或 MSB 对齐、PCM/DSP、TDM 和 AC’97 等协议。将音频模块配置为发 送器时,SAI 接口可提供 SPDIF 输出。SAI 通过两个完全独立的音频子模块来实现这种灵 活性和可配置性。每个模块都有自己的时钟发生器和 I/O 线控制器。SAI 可以配置为主模 式或配置为从模式。音频子模块既可作为接收器,又可作为发送器;既可与另一模块同步, 又可以不同步。SAI 可与其它 SAI 相连接来同步运行。
1、命令行播放wav文件
aplay /home/root/test.wav
2.命令行播放MP3文件
mplayer /home/root/test.mp3
3.命令行播放MP4文件
mplayer -fs -vo fbdev /home/root/test.mp4
2.6网口通讯
网络2路和1路wifi
2.7 看门狗
FETMX6ULL-C核心板看门狗应该好几个O(∩_∩)O哈哈~
2.8 SPI通讯
FETMX6ULL-C核心板原生支持4路SPI通讯接口
以SPI1为例进行测试。。
fltest_cmd_spidev -D /dev/spidev0.0
2.9 WIFI通讯
使用命令行进行wifi网络连接:
ifconfig wlan0 up #打开无线网卡
ifconfig wlan0 down #关闭无线网卡
ip link set wlan0 up #打开无线网卡
ip link set wlan0 down #关闭无线网卡
ip link show wlan0 #检测网卡状态 已激活网卡<>内显示包括UP的关键字
iwconfig #产看网卡信息
iw dev #检查可用网卡
iw list #列出WIFI网卡的性能
iw dev wlan0 scan #扫描WIFI
iw dev wlan0 scan | grep [SSID] #扫描名为SSID的WIFI 此处SSID输入期望的WIFI名
iw dev wlan0 link #查看连接状态
iw dev wlan0 connect [SSID] #不加密时可直接连接 此处SSID输入连接的WIFI名
iw dev wlan0 connect [SSID] key 0:[WEP密钥] #WEP加密WIFI连接
iw wlan0 connect linux #连接WIFI:LINUX
iw wlan0 disconnect #关闭WIFI连接
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf & #WPA加密配置文件wpa_supplicant重启
dhclient wlan0 #为网卡分配IP地址
2.10 RTC实时时钟
1. 查看时间和日期
命令 : "date"
2.设置时间和日期
例如:将系统日期设定成2009年11月3日的命令
命令 : "date -s 11/03/2009"
将系统时间设定成下午5点55分55秒的命令
命令 : "date -s 17:55:55"
3. 将当前时间和日期写入BIOS,避免重启后失效
命令 : "hwclock -w"
2.12 ADC采集
10路ADC接口,然也是全被其他功能占用,此开发板地板不便测试。
2.13 PWM脉冲
8路PWM脉冲,然脉冲输出引脚都被复用。
命令行测试下LCD背光
root@fl-imx6ull:~# cat /sys/class/backlight/backlight/max_brightness
7
root@fl-imx6ull:~# cat /sys/class/backlight/backlight/brightness
6
root@fl-imx6ull:~# echo 3 > /sys/class/backlight/backlight/brightness
root@fl-imx6ull:~# cat /sys/class/backlight/backlight/brightness
3
2.14、蓝牙
命令行控制蓝牙通讯
root@fl-imx6ull:~# source /usr/bin/bt.sh
root@fl-imx6ull:~# bluetoothctl
[CHG] Controller B4:6D:C2:2E:0B:DB Pairable: yes
[bluetooth]# power on
[bluetooth]# pairable on
[bluetooth]# discoverable on
[bluetooth]# agent on
[bluetooth]# default-agent
三、硬件电路
硬件电路设计官方毕竟还是以开发板的形式出现,硬件电路设计并没有全覆盖,SPI、IIC、UART等接口是以排针形式出现,方便用户扩展。
3.1 多路串口通讯
串口转USB设计,CH340E体积很小,电路也很简单非常好用。
3.2 CAN通讯
CAN通信硬件的核心是CAN控制器和CAN收发器,以及CAN_H和CAN_L差分信号的物理层。 CAN控制器和CAN收发器的组合是用于产生和接收CAN通信协议的数据帧。CAN控制器负责组织数据并生成数据帧,而CAN收发器则将数据帧从CAN控制器传输到物理总线上,反之亦然。
3.3 音频播放
WM8960是欧胜公司(Wolfson)的一款低功耗、高质量的立体声音频编解码芯片。它内部集成D类喇叭功放,每个通道可以驱动一个1W喇叭(8Ω)。此外,它还内部集成3个立体声输入源,可以灵活配置,并拥有一路完整的麦克风接口。
3.4 USB接口
3.5 LCD显示
RGB LCD 是指液晶显示器,它采用 RGB 彩色模式,通过调整 RGB 三种颜色的比例,可以呈现各种颜色和图像。RGB LCD 的像素点通常由三个小灯组成,分别是红色、绿色和蓝色,也被称为 RGB。每个像素点的颜色可以通过改变 RGB 三种颜色的比例来调整,以实现不同的颜色和灰度级别。
3.6 WIFI通讯
WIFI模块,采用USB通讯,与FETMX6ULL核心板进行通讯。
3.7 RTC实时时钟
外部始终芯片,具有更高的稳定性,和准确性。
3.8 网口通讯
两路百兆网口通讯
3.9 供电电源
3.10 SD卡
3.11 4G网络通讯
需要另购买通讯模块
四、开机自启
4.1、QT开机自启
Qt 系统开机后默认启动桌面程序(nand 版无 qt),如果需要自动启动用户程序,请修改文件系统中
的/etc/matchbox/session
root@fl-imx6ull:/# vi /etc/matchbox/session
在 matchbox-desktop &后添加用户自己的应用程序,
例如 ping 测试程序
/forlinx/qtbin/ping &
开机就会自动启动 ping 测试程序。
如果注释掉
# matchbox-desktop &
# matchbox-panel --titlebar --start-applets $START_APPLETS --end-applets $END_APPLETS &
则不运行桌面且不显示标题栏。
如果修改 match-panel 选项,会修改标题栏内容,比如去掉
”END_APPLETS=clock,battery,$KEYBOARD_APPLET,systray,startup-notify,notify”
内的 clock,会不显示时间。
例如:
START_APPLETS=showdesktop,windowselector
END_APPLETS=battery,$KEYBOARD_APPLET,systray,startup-notify,notify
matchbox-panel --titlebar --start-applets $START_APPLETS --end-applets $END_APPLETS &
4.2、开机自启脚本
OKMX6ULL-S 开发板的自启脚本为/etc/rc.local,可以在里面添加自启的命令服务等。
例如,设置静态 IP 的方法中,在自启脚本中添加 DNS
root@fl-imx6ull:~# vi /etc/rc.local
添加写入 DNS 到配置文件 echo "nameserver 8.8.8.8" > /etc/resolv.conf
如下
重启开发板查看/etc/resolv.conf 可以看到我们已经把 8.8.8.8 的 dns 写到文件里
root@fl-imx6ull:~# cat /etc/resolv.conf
nameserver 8.8.8.8
4.3、开机自动登录ROOT用户
在任意位置新建一个 login.sh 脚本(本次示例路径为/home/root/),内容如下:
#!/bin/sh
/bin/login -f root
保存退出,赋予脚本执行权限:
chmod 777 login.sh
在开机自启文件(/etc/rc.local)添加如下内容:
/sbin/getty -n -l /home/root/login.sh 115200 ttymxc0