F1C100S自制开发板调试过程

疫情,等了好久板子终于到了。

我这里使用的是坑网大佬提供的tiny200开发包,用的芒果派R3配置文件

1,配置其的介质,我板子上用的是nor-spi-flash,所以需要在设备树里面屏蔽掉nand-flash相关的节点,否则启动会有错误。

2,配置屏幕,这里我被困扰好久,其实只需要在uboot里面配置好屏幕参数即可,其他的无需修改,我想歪了,去修改panel,改了好久好多参数都灭有效果,钻牛角尖了,最后看到坑网小伙伴评论:F1C100s如何初始化LCD引脚 ?24bit如何修改成18bit。RGB666如何修改成565.。。。。 / 全志 SOC / WhyCan Forum(哇酷开发者社区)

linux如果用drm驱动,那么就和uboot无关。
linux如果用simplefb驱动,那么就是用uboot初始化的

我才恍然大悟,直接去uboot里面修改屏幕参数就行了

这个时候,我又有疑问了,这些le,ri,up,参数是个什么玩意,百度后找到了如下资料:

U-boot中通过ENV设置显示设备(如LCD)参数的方法与格式_韩半仙的博客-CSDN博客

/******************************************************************
 * 解析结构体
 ******************************************************************/
struct ctfb_res_modes {
    int xres; /* 可见分辨率 */
    int yres;
    /* 时序: 所有值都以像素时钟为单位(当然除了像素时钟本身) */
    int pixclock; /* 像素时钟(单位:微秒) */
    int left_margin; /* 从行同步到图像左边沿的像素时钟数 */
    int right_margin; /* 从行同步到图像右边沿的像素时钟数 */
    int upper_margin; /* 从场同步到图像上边沿的行数 */
    int lower_margin; /* 从场同步到图像下边沿的行数 */
    int hsync_len; /* 行同步时间长度(像素时钟数) */
    int vsync_len; /* 场同步时间长度(行数) */
    int sync; /* see FB_SYNC_* */
    int vmode; /* see FB_VMODE_* */
};

 参数无效_lcd参数解释及刷新率计算,LCD时序_刘万祥ExcelPro的博客-CSDN博客

2d8dcc2ba9a563e576dd9864e7f994f2.png

4e4bba4f1f601a1a0910cbda331f3760.png

到这就知道参数怎么设置,以及参数的含义了。

最后看下测试效果:

好多东西都参考了这个文档的教程:https://linuxdevicedriversdoc.readthedocs.io/en/latest/Doc/06.Input%E5%AD%90%E7%B3%BB%E7%BB%9F/02.hexdump%E8%B0%83%E8%AF%95%E5%A4%9A%E7%82%B9%E8%A7%A6%E6%91%B8%E5%B1%8F.html

3,通过控制台命令切换USB模式,参考下面帖子

主线Linux用shell命令切换 OTG(分享)tiny200/licheepi nano|zero均可以使用 / 全志 SOC / WhyCan Forum(哇酷开发者社区)​​​​​​

&usb_otg {
        dr_mode = "otg"; /* 三个可选项: otg / host / peripheral */
        status = "okay";
};

##切换到host模式:
# echo host > /sys/devices/platform/soc/1c13000.usb/musb-hdrc.1.auto/mode
# [  117.758152] phy phy-1c13400.phy.0: Changing dr_mode to 1
[  118.414817] usb 1-1: new high-speed USB device number 3 using musb-hdrc
[  118.598193] usb-storage 1-1:1.0: USB Mass Storage device detected
[  118.611789] scsi host0: usb-storage 1-1:1.0
[  119.686198] scsi 0:0:0:0: Direct-Access     Mass     Storage Device   1.00 PQ: 0 ANSI: 0 CCS
[  119.703976] sd 0:0:0:0: [sda] 3842048 512-byte logical blocks: (1.97 GB/1.83 GiB)
[  119.725260] sd 0:0:0:0: Attached scsi generic sg0 type 0
[  119.739844] sd 0:0:0:0: [sda] Write Protect is off
[  119.771819] sd 0:0:0:0: [sda] No Caching mode page found
[  119.777288] sd 0:0:0:0: [sda] Assuming drive cache: write through
[  119.801571]  sda: sda1 sda2 sda3
[  119.817224] sd 0:0:0:0: [sda] Attached SCSI removable disk

#
##切换到device模式:
# echo peripheral > /sys/devices/platform/soc/1c13000.usb/musb-hdrc.1.auto/mode
[  123.880272] phy phy-1c13400.phy.0: Changing dr_mode to 2
# [  123.890905] usb 1-1: USB disconnect, device number 3

4,移植wifi

        这段时间把wifi移植了一下,我买了几个rtl8189es模块,自己作了一个tf卡接口,直接插到板子上的tf卡接口上去, 驱动的话我从github上找了一个可用的,克隆到自己的仓库了,用也能用,就是延迟有点高。

下面这个是我移植esp32做网卡的过程。

# cd /lib/modules/5.4.99/extra/
# modprobe esp32_spi.ko resetpin=0

可能会遇到ifconfig后看不到网卡的情况,这个时候我们去看看

# ls /sys/class/rfkill/rfkill
ls: /sys/class/rfkill/rfkill: No such file or directory
# cat /sys/class/rfkill/rfkill
cat: can't open '/sys/class/rfkill/rfkill': No such file or directory
# cat /sys/class/rfkill/rfkill
rfkill0/  rfkill1/

如果有类似

# cat /sys/class/rfkill/rfkill0/uevent
RFKILL_NAME=phy0
RFKILL_TYPE=wlan
RFKILL_STATE=0
# cat /sys/class/rfkill/rfkill1/uevent
RFKILL_NAME=hci0
RFKILL_TYPE=bluetooth
RFKILL_STATE=0

说明是已经成功加载驱动了。

如果ifconfig看不到网卡可能是没打开,使用ifconfig espsta0 up 打开网卡,这里我遇到一个问题

# ifconfig espsta0 up
ifconfig: SIOCSIFFLAGS: Operation not possible due to RF-kill

这是因为系统没有增加rfkill这个软件包,有两种方法解决:

第一、

去buildroot里面的busybox增加软件包执行

第二、

0就是关闭,1就是打开

# echo 1 > /sys/class/rfkill/rfkill1/state
# echo 1 > /sys/class/rfkill/rfkill0/state
# echo 0 > /sys/class/rfkill/rfkill0/state
# echo 1 > /sys/class/rfkill/rfkill0/state

然后我么就可以使能网卡了

# rfkill list
0: phy0: wlan
        Soft blocked: yes
        Hard blocked: no
1: hci0: bluetooth
        Soft blocked: yes
        Hard blocked: no
# rfkill unblock all
# ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

# ifconfig espsta0 up
# ifconfig
espsta0   Link encap:Ethernet  HWaddr 30:AE:A4:15:03:58
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

#


我么们尝试扫描wifi

# iw espsta0 scan | grep SSID
        SSID: ChinaNGB-Yd6FTJ
        SSID: ChinaNet-S9XX
        SSID: ChinaNet-jZvT
        SSID: ChinaNet-P1l6
        SSID: Carrie Yang
                 * UTF-8 SSID
        SSID: CMCC-UPqj
        SSID: \xe8\x90\x9d\xe5\x8d\x9c\xe7\x99\xbd\xe8\x8f\x9c
        SSID: TP-LINK_32F9
        SSID: ChinaNet-imsv
        SSID: CMCC-YCA7
        SSID: wifi-yyds
        SSID: ChinaNet-bKvs
        SSID: CMCC-Qf4X
        SSID: CMCC-5sp7
        SSID: CMCC-YSsA
        SSID: CMCC-ANd5
        SSID: \xe8\x83\x96\xe8\x83\x96\xe6\x97\xa0\xe6\x95\x8c\xe8\x83\x96
        SSID: CMCC-deii
                HESSID: 94:be:09:91:be:99
        SSID: CMCC-F9D3
        SSID: HUAWEI-HXY302
                 * UTF-8 SSID
        SSID: TP-LINK_5D72
        SSID: CMCC-PAd9
#

链接wifi

# cat /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
network={
        ssid="wifi-yyds"
        psk="123456789"
}

# wpa_supplicant -D nl80211 -i espsta0 -c /etc/wpa_supplicant.conf -B
Successfully initialized wpa_supplicant
# [  165.502014] esp32_spi: esp_inetaddr_event: Interface Down: 0
[  167.196513] esp32_spi: cmd_auth_request: Authentication request: 44:41:f0:18:d8:c9 4 0 0 0
[  167.439461] esp32_spi: cmd_assoc_request: Association request: 44:41:f0:18:d8:c9 4 27
[  167.480070] esp32_spi: process_assoc_event: Connection status: 0
[  167.567024] esp32_spi: process_rx_packet: Rx PACKET_TYPE_EAPOL!!!!
[  167.573433] NOHZ: local_softirq_pending 08
[  167.592913] esp32_spi: process_rx_packet: Rx PACKET_TYPE_EAPOL!!!!
[  167.599199] NOHZ: local_softirq_pending 08
[  173.361339] esp32_spi: esp_inetaddr_event: NETDEV_UP interface espsta0 ip changed to  192.168.001.022

查看网卡

# ifconfig
espsta0   Link encap:Ethernet  HWaddr 8C:AA:B5:8E:C3:A4
          inet addr:192.168.1.22  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:10 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:623 (623.0 B)  TX bytes:964 (964.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

#

5,适配触摸屏

我这是拆的屏幕,自带触摸芯片是GT911,sdk里面的分辨率是800x480的,弄上去触摸到的位置有偏差,想到应该是触摸芯片的配置文件不对,查看源码,发现是驱动在创建的时候写入了一个配置文件,名字是goodix_911_cfg.bin,发现就是一个配置数组,数组内容下面这个链接有介绍,至此我们就直接简单粗暴修改下尺寸,但是发现不行,报错。

http://www.doczj.com/doc/bb14276644.html

#include <stdio.h>

unsigned char GT911_CFG_TBL[] =
{
0x42, 0xE0, 0x01, 0x10, 0x01, 0x0A, 0x3D, 0x00, 0x01, 0x08, 0x28, 0x08, 0x5A, 0x46, 0x03, 0x05,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1A, 0x1E, 0x14, 0x89, 0x2A, 0x09, 0x57, 0x5C,
0xB5, 0x06, 0x00, 0x00, 0x00, 0x02, 0x01, 0x1D, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x46, 0x82, 0x94, 0xC5, 0x02, 0x07, 0x00, 0x00, 0x04, 0x96, 0x4A, 0x00, 0x85,
0x54, 0x00, 0x77, 0x5F, 0x00, 0x6A, 0x6C, 0x00, 0x5F, 0x7A, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x10, 0x12, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x04, 0x06, 0x08, 0x0A, 0x0F, 0x10, 0x12, 0x16, 0x18, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,
0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x01 
};


unsigned char calcChecksum(unsigned char *buf, unsigned char len) {
  unsigned char ccsum = 0;
  for (unsigned char i = 0; i < len; i++) {
    ccsum += buf[i];
  }
  return (~ccsum) + 1;
}

int main() {
	
	unsigned char sub = 0;
	sub = calcChecksum(GT911_CFG_TBL,sizeof(GT911_CFG_TBL)-2);
	printf("sub:%x\n",sub);

	return 0;
}

后面又移植了fr6336U,成功驱动了,顺便测试了一下,也没啥毛病,这里记一下特别好用的命令:

hexdump /dev/input/event0

音频这一块也顺便测试了一下,也是ok的,这里记录一下测试命令:

# tinymix set 1 10
# tinymix set 2 1

# tinymix set 13 1
# tinymix contents
Number of controls: 25
ctl     type    num     name                                    value
0       INT     1       DAC Playback Volume                     63 (range 0->63)
1       INT     1       Headphone Playback Volume               10 (range 0->63)
2       BOOL    2       Headphone Playback Switch               On, On
3       INT     1       Line In Playback Volume                 0 (range 0->7)
4       INT     1       FM In Playback Volume                   0 (range 0->7)
5       INT     1       Mic In Playback Volume                  3 (range 0->7)
6       INT     1       Mic Boost Volume                        4 (range 0->7)
7       INT     1       ADC Capture Volume                      3 (range 0->7)
8       BOOL    1       ADC Mixer Right Out Capture Switch      Off
9       BOOL    1       ADC Mixer Left Out Capture Switch       Off
10      BOOL    1       ADC Mixer Line In Capture Switch        Off
11      BOOL    1       ADC Mixer Right FM In Capture Switch    Off
12      BOOL    1       ADC Mixer Left FM In Capture Switch     Off
13      BOOL    1       ADC Mixer Mic Capture Switch            Off
14      BOOL    1       Left Mixer Right DAC Playback Switch    Off
15      BOOL    1       Left Mixer Left DAC Playback Switch     Off
16      BOOL    1       Left Mixer FM In Playback Switch        Off
17      BOOL    1       Left Mixer Line In Playback Switch      Off
18      BOOL    1       Left Mixer Mic In Playback Switch       Off
19      BOOL    1       Right Mixer Left DAC Playback Switch    Off
20      BOOL    1       Right Mixer Right DAC Playback Switch   Off
21      BOOL    1       Right Mixer FM In Playback Switch       Off
22      BOOL    1       Right Mixer Line In Playback Switch     Off
23      BOOL    1       Right Mixer Mic In Playback Switch      Off
24      ENUM    2       Headphone Source Playback Route         , DACMixer, , DACMixer
# mpv /media/qhc-zjl.mp3
Compiled without libass.
There will be no OSD and no text subtitles.
Playing: /media/qhc-zjl.mp3
 (+) Audio --aid=1 (mp3 2ch 44100Hz)
AO: [oss] 44100Hz stereo 2ch s16

A: 00:01:25 / 00:03:57 (36%)

tinycap xixi.wav -t 2 

tinyplay xixi.wav
playing 'xixi.wav': 2 ch, 48000 hz, 16 bit

正常播放,设置Mic Boost Volume可以调节录音大小。

下一步就是调试摄像头了。 

如何查看摄像头支持的格式

Ubuntu 下如何测试 USB 摄像头支持的分辨率、压缩格式,并使用 OpenCV 按正确的格式读取出来?_斜雨踏歌的博客-CSDN博客_usb摄像头输出格式

使用命令行拍照测试

1,查询摄像头支持的格式和分辨率

v4l2-ctl -d /dev/video1 --list-formats-ext

2,设置格式

media-ctl --set-v4l2 '"ov2640 0-0030":0[fmt:YUYV8_2X8/640x480]'

3,开始拍照

fswebcam -d /dev/video0 --no-banner -r 640x480 -S 10 1.jpg

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值