@lovehex99 啊嘻,这……哈哈哈原来是这样,
yofa2008 发布的帖子
-
回复: Gaviar Handheld (小志掌機)
我用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上多次下载并编译,问题仍然一致。基本可以排除文件 不一致造成的 -
回复: Gaviar Handheld (小志掌機)
@lovehex99 你github下载的工程能编译出可运行的img吗? 在没有任何改动的情况下,编译出的img串口启动时提示出错,我用的是ubuntu20.04。
有没有什么思路? -
回复: Gaviar Handheld (小志掌機)
@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需要在上面 修改些参数
-
回复: Gaviar Handheld (小志掌機)
@xiaowenge 三明治结构的全键盘工程机来了,准备就绪。就等司徒大佬回来传授一下如何替换屏驱动开机了@steward,linux开发不会搞,跟大神学会
图: -
回复: Gaviar Handheld (小志掌機)
@steward 许久没见大佬跟贴,猜测一定是在忙大事。目前我遇到了诡异的问题:为何用dd的命令复制到TF卡的img不写入,而phoenix写的img就能写入。是dd命令的问题??
见图 -
回复: Gaviar Handheld (小志掌機)
@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.
-
回复: Gaviar Handheld (小志掌機)
@lovehex99 你没打板如何 搭硬件环境的?是有现成的板子买吗?
@xiaowenge 都是想尽可能匹配‘小志’的硬件外设,布局按键在CAD里转来转去花了些时间。哈哈 -
回复: Gaviar Handheld (小志掌機)
【碟】照来了,丑了点。但功能验证应该够用了。没有司徒 大佬的加藤鹰手法,右边的接口焊接失败了,。@steward
我要尽快跟上你的节奏了@lovehex99 -
回复: Gaviar Handheld (小志掌機)
@steward 感谢提供的固件资料。手上D88已经正常开机,大致看了一下,那个年代感又回来了。。。再次拜谢;后续紧跟大佬搞游戏机,找找那些 【爷青回】的瞬间。哈哈哈,再次拜谢了
-
回复: Gaviar Handheld (小志掌機)
@steward 在 Gaviar Handheld (小志掌機) 中说:
iriver D88 UART 跟 音頻共用, 所以預設並沒有訊息輸出, 君正這個驅動比較舊, 建議使用 Win7 x86 系統刷機的, 另外, GitHub 是目前主要存放檔案的地方, 如果無法存取的話, 你只能請人幫忙搬移了~
@lovehex99 在 Gaviar Handheld (小志掌機) 中说:
@yofa2008 在 Gaviar Handheld (小志掌機) 中说:
@lovehex99 你也是在国内吗?github下载是怎么解决的?我这边访问不了啊
我在台灣喔
你看司徒要不要改gitee@steward @lovehex99 okk.感谢告知,我再看看别的办法吧
-
回复: Gaviar Handheld (小志掌機)
@steward 上一条不知道为何图没显示出来。windows系统那边还没装好,暂时刷不了固件。先拉了串口出来,看看到底是什么原因卡了。
按大佬的提示引出了串口线,暂时没有开孔固定。
设置串口baudrate 57600后,从串口看到原生的系统挂了,只显示了一个'.'然后反复重启。
待过两天windows那边装好 ,从USB刷固件。 -
回复: Gaviar Handheld (小志掌機)
@steward 我的D88到手了,跟大佬一起玩君正的CPU。开机进度条卡在了80%左右,然后重启again and again.