续这位仁兄的贴子:https://bbs.aw-ol.com/topic/263
屏幕链接:https://item.taobao.com/item.htm?id=623507778498
转接板工程:
坑1:这个屏幕竟然是1lane,并非2lane。
坑2:卖家没给具体时序参数,看来得从屏幕上iic配置抓。
还没详细调时序参数,但初步已有显示。
软件过几天有空了详细调试后整理上传。
续这位仁兄的贴子:https://bbs.aw-ol.com/topic/263
屏幕链接:https://item.taobao.com/item.htm?id=623507778498
转接板工程:
还没详细调时序参数,但初步已有显示。
软件过几天有空了详细调试后整理上传。
固件,直接去资料页面,百度云下载就行。
附个H618工程版图片
终于lay到尾声,能不能跑起来得看运气。
当时MCore-H616核心板有几个缺点:
1、显示仅HDMI,和几乎没啥用的cvbs
2、核心板没带EMMC,导致只能配合TF卡运行
3、内存是单颗粒DDR3L,导致带宽有限
然后,就尝试lay了一下R818,这是芯片框图:
R818更侧重于本地显示和CSI,可直接驱动 DSI/LVDS/RGB 这种接口的屏幕,其他资源和H616相当,惊喜是默认工规,有这类场景的可以多关注关注。
核心板带EMMC,最大64G还是128G来着到时候再说。
内存是LPDDR4,32bit的数据线,最大4GB可拉满R818的胃口。
另外芯片本体更小,所以这次将R818+EMMC+LPDDR4+PMU(带锂电池管理)整体做到了3x3cm。并且预留屏蔽罩安装。商业版本可选择焊接A133。
系统方面除了本身提供的Android10以外,还有Tina-Linux。所以到时做完会发布Tina,ArmBian,Android三套系统。
续前贴:https://bbs.aw-ol.com/topic/311/
当时使用D1开发板驱动了,因D1的mipi是30pin,需要转接才能接树莓DSI屏。
麻雀设计的时候考虑到这点,直接板载的15Pin,所以直接接上就好。
效果:
代码:(board.dts 和uboot-board.dts都替换下边的)
&lcd0 {
lcd_used = <1>;
lcd_driver_name = "tft08006";
lcd_backlight = <100>;
lcd_if = <4>;
lcd_x = <800>;
lcd_y = <480>;
lcd_width = <52>;
lcd_height = <52>;
lcd_dclk_freq = <33>;
lcd_pwm_used = <1>;
lcd_pwm_ch = <2>;
lcd_pwm_freq = <1000>;
lcd_pwm_pol = <0>;
lcd_pwm_max_limit = <255>;
/*
lcd_hbp = <32>;
lcd_ht = <868>;
lcd_hspw = <4>;
lcd_vbp = <12>;
lcd_vt = <500>;
lcd_vspw = <4>;
*/
lcd_hbp = <32>;
lcd_ht = <868>;
lcd_hspw = <4>;
lcd_vbp = <10>;
lcd_vt = <520>;
lcd_vspw = <4>;
lcd_dsi_if = <0>;
lcd_dsi_lane = <1>;
lcd_lvds_if = <0>;
lcd_lvds_colordepth = <0>;
lcd_lvds_mode = <0>;
lcd_frm = <0>;
lcd_hv_clk_phase = <0>;
lcd_hv_sync_polarity= <0>;
lcd_io_phase = <0x0000>;
lcd_gamma_en = <0>;
lcd_bright_curve_en = <0>;
lcd_cmap_en = <0>;
lcd_fsync_en = <0>;
lcd_fsync_act_time = <1000>;
lcd_fsync_dis_time = <1000>;
lcd_fsync_pol = <0>;
deu_mode = <0>;
lcdgamma4iep = <22>;
smart_color = <90>;
/* lcd_gpio_0 = <&pio PG 13 GPIO_ACTIVE_HIGH>;*/
pinctrl-0 = <&dsi4lane_pins_a>;
pinctrl-1 = <&dsi4lane_pins_b>;
};
首先,查原理图,GT911触摸挂在TWI2上(PE12,PE13),CTP中断PB3,CTP复位控制:PB2
然后修改对应dts的twi2部分(Tina-Linux/device/config/chips/t113/configs/mq_r/linux-5.4/board.dts),修改好如下:
make kernel_menuconfig
Device Drivers --->
Input device support --->
[*] Touchscreens --->
[M] gt9xxnew touchscreen driver
检查启动模块加载控制:Tina-Linux/target/allwinner/t113-mq_r/busybox-init-base-files/etc/init.d/rc.modules
文件内容如下,这里我们重点将gt9xxnew_ts.ko前的注释去掉,同时根据实际mangopi板子选择需要加载的wifi驱动模块。
#!/bin/sh
echo "------run rc.modules file-----"
#export boot_partition=$(fw_printenv -n boot_partition 2>/dev/null)
# if [ x${boot_partition} == xboot ];then
/sbin/insmod /lib/modules/5.4.61/usb-storage.ko
/sbin/insmod /lib/modules/5.4.61/sunxi_gpadc.ko
/sbin/insmod /lib/modules/5.4.61/gt9xxnew_ts.ko
echo 0x07090160 0x083F10F7 > /sys/class/sunxi_dump/write
# /sbin/insmod /lib/modules/5.4.61/8723ds.ko
/sbin/insmod /lib/modules/5.4.61/8189fs.ko
sleep 4
wpa_supplicant -Dnl80211 -iwlan0 -c /etc/wifi/wpa_supplicant.conf -B
# fi
然后编译打包:make;pack
[ 6.076660] sunxi_gpadc_init,2151, success
[ 6.081641] sunxi_gpadc_setup: get channel scan data failed
[ 6.088244] input: sunxi-gpadc0 as /devices/virtual/input/input1
[ 6.100435] get ctp_power is fail, -22
[ 6.104646] get ctp_power_ldo_vol is fail, -22
[ 6.109692] sunxi_ctp_startup: ctp_power_io is invalid.
[ 6.115586] get ctp_gesture_wakeup fail, no gesture wakeup
[ 6.121812] gt9xxnew_ts 2-0014: 2-0014 supply ctp not found, using dummy regulator
[ 6.329053] input: gt9xxnew_ts as /devices/virtual/input/input2
此时得到gt911的设备节点是event2:
root@TinaLinux:/# ls /dev/input/event*
/dev/input/event0 /dev/input/event1 /dev/input/event2
因为我们的tina-linux默认勾选了lvgl8,所以直接修改文件461行即可:/home/mango/1/Tina-Linux/package/gui/littlevgl-8/lv_examples/src/lv_drv_conf.h
重新打包编译:m;p
root@TinaLinux:/# lv_examples 0
wh=800x480, vwh=800x480, bpp=32, rotated=0
头铁没注意看官方默认版本是14.04,总体来说还挺顺利,编译过程中遇到小坑记录一下。
https://d1.docs.allwinnertech.com/study/study_2getsdk/
repo branch 输出是 product-smartx-d1-tina-v1.0-release
参考官方:https://d1.docs.allwinnertech.com/study/study_3ubuntu/
gdbusauth.c: In function '_g_dbus_auth_run_server':
gdbusauth.c:1298:11: error: '%s' directive argument is null [-Werror=format-overflow=]
1298 | debug_print ("SERVER: WaitingForBegin, read '%s'", line);
解决:
out/d1-nezha/compile_dir/target/host/glib-2.50.1/gio/gdbusauth.c 将1298行的挪到 if语句后边,改完如下:
1294 line = _my_g_input_stream_read_line_safe (g_io_stream_get_input_stream (auth->priv->stream),
1295 &line_length,
1296 cancellable,
1297 error);
1298 //debug_print ("SERVER: WaitingForBegin, read '%s'", line);
1299 if (line == NULL)
1300 goto out;
1301 debug_print ("SERVER: WaitingForBegin, read '%s'", line);
gdbusmessage.c: In function 'g_dbus_message_to_blob':
gdbusmessage.c:2698:30: error: '%s' directive argument is null [-Werror=format-overflow=]
2698 | tupled_signature_str = g_strdup_printf ("(%s)", signature_str);
解决方法:同坑1,把gio/gdbusmessage.c: 2698行的tupled_signature_str = g_strdup_printf ("(%s)", signature_str);移到if else 语句块后面
2697 gchar *tupled_signature_str;
2698 //tupled_signature_str = g_strdup_printf ("(%s)", signature_str);
2699 if (signature == NULL)
2700 {
2701 g_set_error (error,
2702 G_IO_ERROR,
2703 G_IO_ERROR_INVALID_ARGUMENT,
---
2717 goto out;
2718 }
2719 tupled_signature_str = g_strdup_printf ("(%s)", signature_str);
2720 g_free (tupled_signature_str);
./mkerrcodes | gawk -f ./mkerrcodes2.awk >code-from-errno.h
gawk: ./mkerrcodes2.awk:94: warning: regexp escape sequence `\#' is not a known regexp operator
gawk -f ./mkstrtable.awk -v textidx=2 -v nogettext=1 \
./err-sources.h.in >err-sources-sym.h
gawk: ./mkstrtable.awk:113: warning: regexp escape sequence `\#' is not a known regexp operator
比较省事的办法是gawk降级。
sudo apt autoremove gawk
wget https://ftp.gnu.org/gnu/gawk/gawk-4.2.1.tar.gz
然后解压,./configure --prefix=/usr --libexecdir=/usr/lib , make , make check , sudo make install , 再检查gawk:
mg@Ubuntu:~/tina-d1-open$ gawk --version
GNU Awk 4.2.1, API: 2.0
然后清理一遍之前输出: rm -r out/d1-nezha/compile_dir/target/libgpg-error-1.27
再 make -j1 编译通过。
基础版本不带WiFi,但wifi周围器件/ipex等都是齐的,自行焊接8723,8189等。
WiFi版本到手可上网,带一条wifi天线。
资料下周上传。
整个MQ-Pro经历了三次版本,终于量产。
遇到点小插曲,由于厂家那边给GT911固化错了配置(把800480分辨率搞成了1024600),所以找厂家要了一份正确配置,需要ctp驱动中开启自动更新配置。
另外,tina linux驱动文件夹gt9xxnew中,分析gtp_init_panel初始化函数。因为手头这个屏幕与文件的都不同,并且看到源文件注释掉了从屏幕读取id。所以可确定sensor_id恒为0,那么就很简单了,自己的配置直接写到gt9xx.h的GOURP1即可。
#if GTP_COMPATIBLE_MODE
msleep(50);
#endif
// ret = gtp_i2c_read_dbl_check(ts->client, GTP_REG_SENSOR_ID, &sensor_id, 1);
dprintk(DEBUG_INIT, "CTP name : %s\n", config_info.name);
if (!strcmp(config_info.name, "gt9271_mb976a9")) {
sensor_id = 0;
dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id);
} else if (!strcmp(config_info.name, "gt9110_wt097")) {
sensor_id = 1;
dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id);
} else if (!strcmp(config_info.name, "gt9271_wt097")) {
sensor_id = 2;
dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id);
} else if (!strcmp(config_info.name, "gt9110_g200")) {
sensor_id = 3;
dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id);
} else if (!strcmp(config_info.name, "gt9271_noah")) {
sensor_id = 4;
dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id);
} else if (!strcmp(config_info.name, "gt9271_p2")) {
sensor_id = 5;
dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id);
} else if (!strcmp(config_info.name, "gt911_1060")) {
sensor_id = 6;
dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id);
} else if (!strcmp(config_info.name, "gt911_784")) {
sensor_id = 7;
dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id);
} else {
sensor_id = 0;
dprintk(DEBUG_INIT, "gt9xx:sensor_id = %d\n", sensor_id);
}
ret = SUCCESS;
if (SUCCESS == ret) {
if (sensor_id >= 0x08) {
printk("Invalid sensor_id(0x%02X), No Config Sent!\n", sensor_id);
ts->pnl_init_error = 1;
return -1;
}
} else {
printk("Failed to get sensor_id, No config sent!\n");
ts->pnl_init_error = 1;
return -1;
}
}
ts->gtp_cfg_len = cfg_info_len[sensor_id];
GTP_INFO( "CTP_CONFIG_GROUP%d used, config length: %d\n", sensor_id + 1, ts->gtp_cfg_len);
#define CTP_CFG_GROUP1 {\
0x42,0x20,0x03,0xE0,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,0x4B,0x01}
效果:
TODO:以后再尝试把group配置放到dts中,会不会更优雅些?
底板未回,今天仍然是飞线测试:
1、电源管理基于了axp717芯片,自带完善的锂电池充放电,比axp707的方案多了一路boost 5V。
2、测试VMID引脚,当外部连接到USB时,可实现充电,此时VMID为USB电压(5V左右),当去掉USB时,axp的dcdc4此时工作在boost模式,VMID也输出5V。
3、安卓10启动大概20秒,运行时,电流稳定在0.16A,此时电池电压为3.9V。
4、关于发热,个人感觉安卓轻载时完全不需要加散热片,芯片只是温热。等具体运行app时再测试动态电流吧。
截止到现在已售两种版本数量一共差不多300pcs,今天只发走了120pcs。剩余周一可发完。
顺便骗点赞:
twitter点com/mangopi_sbc/status/1469197984303022080
V853(A7 1GHz 和内置 RV-MCU)
NPU 1Tops(与RK3568几乎相同的IP)
512MB DDR3L 和 8GB EMMC
axp2101 pmu
所有引脚都连接到金手指连接器,只有 27.5x42.5mm 。
有俩猫耳朵,典故如下:
所以,看到小猫咪就能想到这个板子啦。
直呼:烫烫烫
M-Core不定期更新到B站上
https://t.bilibili.com/647016684108906501
首批(V1.5)做的不多,只有400片,大部分是WiFi版本,我自己留几片用于测试 下批次1K几乎全是WiFi版本。
下批V1.6更新项:
TODO项:
CPU:D1,1G主频,动态供电
内存: 512MByte /1GByte DDR3
存储:TF Card
无线:WiFi+BT4 基于RTL8723ds
USB: typeC OTGx1,HOSTx1
显示:HDMI/DSI/LVDS
触控:CTP
摄像头:DVPx1
网络:DVP可复用为RMII
音频out:HPOUT
指示:电源和状态LED
底层console:uart0 位于40Pin内
尺寸:3x6.5cm ,4个固定装配脚
扩展口1:20P-FPC座,含LVDS/DSI和CTP
扩展口2(V1.0):40P-2.54,含2路I2C,3路UART,1路SPI/DBI,1路I2S(最多支持6路输入声道),一路DMIC(最多支持6声道),若干PWM和GPIO
网络:DVP端子的复用增加RGMII千兆
扩展口2(V1.1):通过调整后,在原有基础上新增一路UART,新增LEDC控制
优化HDMI部分走线,增加TVS
优化WiFi天线部分阻抗匹配
CPU:D1,1G主频,动态供电)
内存: 512MByte DDR3/1GByte DDR3
存储:TF Card
无线:WiFi+BT4 基于RTL8723ds
USB: typeC OTGx1,HOSTx1
显示:HDMI/DSI/LVDS
触控:支持CTP
摄像头:DVPx1
网络:DVP可复用为RMII
音频out:HPOUT
指示:电源和状态LED
底层console:uart0 位于40Pin内
尺寸:3x6.5cm ,4个固定装配脚
扩展口1:20P-FPC座,含LVDS/DSI和CTP
扩展口2(V1.0):40P-2.54,含2路I2C,3路UART,1路SPI/DBI,1路I2S(最多支持6路输入声道),一路DMIC(最多支持6声道),若干PWM和GPIO
设计目的:
为mCore-R818 邮票孔的测试底板
资源:
显示部分:
摄像头部分:
音频:
通讯:
其他:
引出pin:
UART0 (系统调试)
UART2(通用)
UART3(通用)
SPI2
TWI3
若干IO
硬件设备:D1s/F133板子,自备热风枪或BGA返修台
首先,需要购买若干T113芯片:(假货宝上直接搜 全志T113 )
然后,将D1s/F133焊下来,把T113焊上去,务必记得T113的肚子要上焊锡,因为它是非常重要的GND
然后,改内存供电电压,MQ的原理图参考:https://mangopi.cc/_media/mq_sch_v1.6.pdf
DRAM从1.8V改到1.5V,需要改动R10成226K即可。
R10在板子哪里呢?我们看下ibom:https://mangopi.cc/_media/mq-1p6_bom.html
左侧找到R10,右侧自动高亮,找到它,换掉。
齐活。连接电脑,叮咚一声,接下来用xfel就能识别到啦 https://github.com/xboot/xfel
焊接F133的MQ众筹完就会停产。而T113版本的MQ-Dual暂时不受影响。
请关注新的MQ-R板子:https://bbs.aw-ol.com/topic/1125 (届时D1s和T113都有)
LDOA 始终固定1.8V
LDOB 原始应该是1.35V,加载dram调压驱动后变为1.5V(T113)或1.8V(F133)。
@null037 在 100ASK百问网 D1s/T113-s3开发板 适配ov5640 中说:
,插入电脑中,即可查看到刚刚在T113开发板上使用ov5640拍摄的5张照片
强烈建议光速适配下MQ-R