Gaviar Handheld (小志掌機)
-
【碟】照来了,丑了点。但功能验证应该够用了。没有司徒 大佬的加藤鹰手法,右边的接口焊接失败了,。@steward
我要尽快跟上你的节奏了@lovehex99 -
@yofa2008 在 Gaviar Handheld (小志掌機) 中说:
【碟】照来了,丑了点。但功能验证应该够用了。没有司徒 大佬的加藤鹰手法,右边的接口焊接失败了,。
你这个看着像个黑莓手机,上面一个屏幕,下面好多按键
-
-
@yofa2008 你自己打版喔 厲害
-
@steward 在 Gaviar Handheld (小志掌機) 中说:
編譯步驟
換了16G
root@TinaLinux:/etc# mount /dev/mmcblk0p8 /mnt/UDISK/
mount /dev/mmcblk0p8 /mnt/UDISK/
mount: mounting /dev/mmcblk0p8 on /mnt/UDISK/ failed: Input/output error
只有沒對 /dev/sdb8 進行擴充但UART還是開不起來
我編譯步驟是照這個帖子的
Starting kernel ...[02.156][mmc]: MMC Device 2 not found
[02.160][mmc]: mmc 2 not find, so not exit -
-
@lovehex99 你没打板如何 搭硬件环境的?是有现成的板子买吗?
@xiaowenge 都是想尽可能匹配‘小志’的硬件外设,布局按键在CAD里转来转去花了些时间。哈哈 -
@yofa2008 厉害厉害。。怎么用CAD的?
-
@yofa2008 買的喔
-
@steward 在 Gaviar Handheld (小志掌機) 中说:
兩個問題問一下:
- 你是如何燒錄檔案到 MicroSD ?
- 因為預設是使用 adb shell 進入操作(USB Type-C), 你有使用 adb shell 試試嗎?
1.用PhoenixCardv4.2.7.7z
2.有的 ADB SHELL可以操作 -
解開後, 使用 dd 命令燒錄到 MicroSD 卡後, 插入開機, 就會開始播放 Nokia 手機鈴聲~
-
@lovehex99 在 Gaviar Handheld (小志掌機) 中说:
@steward 在 Gaviar Handheld (小志掌機) 中说:
兩個問題問一下:
- 你是如何燒錄檔案到 MicroSD ?
- 因為預設是使用 adb shell 進入操作(USB Type-C), 你有使用 adb shell 試試嗎?
1.用PhoenixCardv4.2.7.7z
2.有的 ADB SHELL可以操作@steward 请问提示Is not Boot mode!是什么意思?我只写了uart4的那个img,没有在adb下找到devices哦
by the way.重新烧写了一下img解决,work type选择start up.
-
播放wav文件,拷贝了一个windows自带的wav.
-
@lovehex99 @steward
今天测试了一张256MB的卡,能正常播放wav。UART4也可正常交互
-
@yofa2008
你是直接燒司徒給的那個img吧?
我是從github下載自己編譯的 -
@lovehex99 对的。建议您也先排除简单的问题,再上手改比较容易。
-
@yofa2008 我硬件是用買的 所以應該沒問題
最近也忙 等後續教程多點再來玩 -
最近在幫 Miyoo Mini/Miyoo Mini Plus 移植 drastic NDS 模擬器, 目前已經快完善了, 這邊先晚一點更新 ~
-
@steward 许久没见大佬跟贴,猜测一定是在忙大事。目前我遇到了诡异的问题:为何用dd的命令复制到TF卡的img不写入,而phoenix写的img就能写入。是dd命令的问题??
见图 -
@yofa2008 img不是磁盘镜像文件,是专有的压缩格式,不带分区表。可以用OpenixCard转换为dd可以写入的带分区表的镜像
-
@awwwwa 啊,原来这样。感谢告知,司徒大佬在帖里提了一下,没说细节。有空我试一下了
-
@xiaowenge 三明治结构的全键盘工程机来了,准备就绪。就等司徒大佬回来传授一下如何替换屏驱动开机了@steward,linux开发不会搞,跟大神学会
图: -
@steward 在 Gaviar Handheld (小志掌機) 中说:
司徒接下來介紹點屏的步驟,而在點屏之前,我們需要先了解一下屏的一些特性,這樣才可以跑順後面的開發,一般常說的 8080 屏、i80 屏、MCU 屏,指的就是傳輸資料的方式是使用 Intel 8080 的讀寫方式,其實早期是有兩大派別,分別是 Intel 8080 和 Motorola 6800,至於為何後來都用 Intel 8080,這應該不用多說,8080 和 6800 的格式可以從下圖知曉
那為何 i80 屏需要做初始化呢 ?因為裡面有專門用來做顯示處理的 MCU,因此,需要設定一些參數,如:width=320, height=240, fps=60 等參數,所以傳送給屏的資料會分成 Data 和 Command,當然,有些特殊制定規格的屏就不須要初始化,因為參數都已經寫死並且固定在 MCU 裡,不過,市面上比較難購買到這類產品
MCU 在顯示圖像時,會固定從 RAM(或稱呼:顯示記憶體、Graphic RAM、GRAM)讀取資料並顯示在屏上面
那該如何初始化呢?目前市面上的屏大約可以分成兩種作法:1. 使用 DB0~DB15 傳送初始化 Data 和 Command, 2. 使用 I2C 傳送 Data 和 Command
兩種方式都可以達到初始化的目的,因此,在購買 i80 屏後,記得跟賣家索取初始化命令
那問題來了,當我們正在刷屏(寫入 RAM)時,MCU 是否有可能正在讀取 RAM ?答案:沒錯,這種狀況一定會發生,假如寫入跟讀取沒有一個同步機制,那就會發生這種狀況,而這種狀況就是一般俗稱:撕裂、閃屏、Screen Tearing,司徒畫了一張流程圖,下圖是 MCU 讀取 RAM 並且顯示在屏上的流程
當 F133 透過 TCON_LCD i80 介面傳送資料給屏時(黃色的像素),由於共用同一塊 RAM,因此,RAM 的內容被更新成黃色,同時,屏的 MCU 也正在更新圖像到屏上,因此,變成第一個畫面(紅色)和第二個畫面(黃色)的交疊狀況,如下圖
那 i80 屏的撕裂問題如何解決呢?其實,一般 i80 屏都會拉出 TE/FRAME 腳位,這個腳位一般不使用,因為它跟時序高度相關,需要同步處理,同常 TE/FRAME 腳位都會懸空,不過,TE/FRAME 腳位其實是用來告知屏的 MCU 是否正在更新圖像(讀取 RAM),因此,為了避免撕裂,F133 TCON_LCD 可以在 MCU 空閒時,傳送更新的資料,這樣就可以避免撕裂
那是不是搞定 TE/FRAME 腳位後,屏就不會撕裂?答案:不是,因為,從模擬器、顯示驅動到硬件傳送都可能會有撕裂問題,所以要確保顯示品質,任何經過的地方都必須仔細處理才可以保證畫面不撕裂
根據司徒的經驗,在不同地方的所造成的撕裂,將會有不一樣的結果,下圖是司徒整理的有趣現象,模擬器因為是像素更新居多,因此,覆蓋一般是從起始像素開始,所以撕裂比較像是上下分層,而顯示驅動一般使用區塊複製,因此,撕裂是屬於左右分層,屏的撕裂,由於更新跟寫入是屬於追跑的現象,因此,撕裂屬於三角分層
LCD 電路
main.s.global _start .equ GPIO_BASE, 0x02000000 .equ PD_CFG0, 0x0090 .equ PD_CFG1, 0x0094 .equ PD_CFG2, 0x0098 .equ PD_DAT, 0x00a0 .equ LCD_RST, (1 << 0) .equ LCD_WR, (1 << 18) .equ LCD_RS, (1 << 19) .equ LCD_RD, (1 << 20) .equ LCD_CS, (1 << 21) .equ LCD_BL, (1 << 22) .equ _250MS, 50000000 .equ _500MS, 100000000 .equ _1S, 200000000 .text .long 0x4000006f .byte 'e','G','O','N','.','B','T','0' .long 0x5F0A6C39 .long 0x8000 .long 0, 0 .long 0, 0, 0, 0, 0, 0, 0, 0 .long 0, 0, 0, 0, 0, 0, 0, 0 .org 0x0400 _start: li t0, 0x11111111 li a0, GPIO_BASE + PD_CFG0 sw t0, 0(a0) li a0, GPIO_BASE + PD_CFG1 sw t0, 0(a0) li a0, GPIO_BASE + PD_CFG2 sw t0, 0(a0) li t0, 0xffffffff li a0, GPIO_BASE + PD_DAT sw t0, 0(a0) jal lcd_rst li t0, 0xb2 jal lcd_cmd li t0, 0x5c jal lcd_dat li t0, 0x5c jal lcd_dat li t0, 0x00 jal lcd_dat li t0, 0x33 jal lcd_dat li t0, 0x33 jal lcd_dat li t0, 0xb7 jal lcd_cmd li t0, 0x35 jal lcd_dat li t0, 0x21 jal lcd_cmd li t0, 0x11 jal lcd_cmd li t0, _250MS jal delay li t0, 0xe0 jal lcd_cmd li t0, 0xd0 jal lcd_dat li t0, 0x06 jal lcd_dat li t0, 0x0b jal lcd_dat li t0, 0x07 jal lcd_dat li t0, 0x07 jal lcd_dat li t0, 0x24 jal lcd_dat li t0, 0x2e jal lcd_dat li t0, 0x32 jal lcd_dat li t0, 0x46 jal lcd_dat li t0, 0x37 jal lcd_dat li t0, 0x13 jal lcd_dat li t0, 0x13 jal lcd_dat li t0, 0x2d jal lcd_dat li t0, 0x33 jal lcd_dat li t0, 0xe1 jal lcd_cmd li t0, 0xd0 jal lcd_dat li t0, 0x02 jal lcd_dat li t0, 0x06 jal lcd_dat li t0, 0x09 jal lcd_dat li t0, 0x08 jal lcd_dat li t0, 0x05 jal lcd_dat li t0, 0x29 jal lcd_dat li t0, 0x44 jal lcd_dat li t0, 0x42 jal lcd_dat li t0, 0x38 jal lcd_dat li t0, 0x14 jal lcd_dat li t0, 0x14 jal lcd_dat li t0, 0x2a jal lcd_dat li t0, 0x30 jal lcd_dat li t0, 0x36 jal lcd_cmd li t0, 0xb0 jal lcd_dat li t0, 0x2a jal lcd_cmd li t0, 0x00 jal lcd_dat li t0, 0x00 jal lcd_dat li t0, 0x01 jal lcd_dat li t0, 0x3f jal lcd_dat li t0, 0x2b jal lcd_cmd li t0, 0x00 jal lcd_dat li t0, 0x00 jal lcd_dat li t0, 0x00 jal lcd_dat li t0, 0xef jal lcd_dat li t0, 0x3a jal lcd_cmd li t0, 0x55 jal lcd_dat li t0, 0x29 jal lcd_cmd li t0, 0x2c jal lcd_cmd li t6, 320 * 80 red: li t0, 0xf800 jal lcd_dat addi t6, t6, -1 bgtz t6, red li t6, 320 * 80 green: li t0, 0x7e0 jal lcd_dat addi t6, t6, -1 bgtz t6, green li t6, 320 * 80 blue: li t0, 0x1f jal lcd_dat addi t6, t6, -1 bgtz t6, blue 1: j 1b lcd_wr: li a0, GPIO_BASE + PD_DAT li t4, 0x00ff and t2, t0, t4 li t4, 0xff00 and t3, t0, t4 sll t2, t2, 1 sll t3, t3, 2 move t5, t1 or t5, t5, t2 or t5, t5, t3 sw t5, 0(a0) li t0, LCD_WR or t5, t5, t0 sw t5, 0(a0) jr ra lcd_dat: move a1, ra li t1, LCD_RS | LCD_RD | LCD_BL | LCD_RST jal lcd_wr jr a1 lcd_cmd: move a1, ra li t1, LCD_RD | LCD_BL | LCD_RST jal lcd_wr jr a1 lcd_rst: move a1, ra li t0, 0x00000000 li a0, GPIO_BASE + PD_DAT sw t0, 0(a0) li t0, _250MS jal delay li t0, 0xffffffff li a0, GPIO_BASE + PD_DAT sw t0, 0(a0) li t0, _250MS jal delay jr a1 delay: addi t0, t0, -1 bgtz t0, delay jr ra .end
完成
请教@steward 这个main.s文件 怎么加载到启动完成的系统中去执行啊,目前在配置lcd需要在上面 修改些参数
-
@lovehex99
请问哪里买的?谢 -
-
-
@yofa2008 你好,蓝色的有按钮的板是哪里买的?
-
@johnaa 临时自己打板做的,用它来完成gpio转接
-
@lovehex99 你github下载的工程能编译出可运行的img吗? 在没有任何改动的情况下,编译出的img串口启动时提示出错,我用的是ubuntu20.04。
有没有什么思路? -
@yofa2008
很久没玩了 我在等晕哥的安卓掌机 -
@lovehex99 别啊,这就弃坑了吗?我的F1C100都还在坑里呢
-
我用MangoPI官网的github包编译出能正常启动的img,网址(https://mangopi.org/mqr);
!
但用司徒大神的包编译的img始终不能正常引导,提示如之前反馈的错误,大致意思是两个ERROR:没有找到uboot.fex头和opensbi.fex头;
!
对比了一些目录发现差异还是比较多的,特别是lichee\brandy-2.0\spl下面:
司徒大神的包里面没有找到sboot文件夹,不知道是啥原因;
我按@steward 你的包编译的固件日志第二行直接调用了include\commit_info.h的CI_INFO那个hash,但你编译好的Img第二行是sh脚本调用log文件生成的。能提示可能是什么原因吗?
MangoPI使用的是lichee\brandy-2.0\目录下的spl-pub,里面内容和你的spl文件目录相差还是比较大。目前已经重新在github上多次下载并编译,问题仍然一致。基本可以排除文件 不一致造成的 -
@yofa2008 司徒大神都鴿了 暈哥的安卓掌機也...
-
@lovehex99 啊嘻,这……哈哈哈原来是这样,
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号