2023年3月1日 星期三

MKS PI 安裝與除錯

買到機王? 無法啟動的 PI。後來又拿到一些出問題的板子,心得是這家公司的產品不是很穩定,要買的話,請自求多福。


無線網卡

買 USB wifi 卡,要挑一下,不然會無法驅動,很麻煩。無線網卡 WU816N 可用,WU817N 無法用。

啟始安裝及更新

由 MKS 的網站下載系統的 image,不常更新,可能有點舊。

第一次啟動,使用 debug port 來連線,設定比較方便。要用 sudo 身分,使用 mincom 來連接,指令如下。

# minicom -b 1500000 -D /dev/ttyUSB0

debug port 是一個 ch341-uart converter,在 Linux 下,會是 /dev/ttyUSBx,如 /dev/ttyUSB0。

無線網路的變數太多,最好先用有線連上。一般可以自動取得 IP,若要設定固定 IP,指令如下

# ip link set dev eth0 up
# ip a add 10.161.86.37/20 dev eth0
# ip route add default via 10.161.80.1

並且設定 /etc/resolv.conf,內容大致如下

nameserver 8.8.8.8 

上面的 IP 是 Google 的 DNS server。

設定網路後,先執行一次 apt update 和 apt upgrade,才能夠同步時間。下面使用 timedatectl 由 ntp server 取得正確時間,不然執行 apt update 會出錯。

# timedatectl set-timezone Asia/Taipei
# timedatectl set-ntp yes
# timedatectl set-local-rtc no
# hwclock -w 

執行 apt update 和 apt upgrade,更新系統的程式。

接下來就可以透過 KIAUH 安裝 Klipper 了。在裝 Klipper 之前,磁碟使用空間 2.1G,裝完後為 4.2G。

KIAUH stands for "Klipper Installation And Update Helper" and is a tool that helps you install or upgrade Klipper, Moonraker, Mainsail, and other extensions. 

因為 MKS 的 image 已安裝 Klipper,不用再 clone kiauh,可以到 kiauh 的目錄下,執行指令如下。注意,後面都要用 mks 的身分執行,不要用 sudo。

$ cd ~/kiauh
$ git pull origin

接著使用 kiauh 執行 klipper 升級,指令如下

$ ~/kiauh/kiauh.sh

MKS 安裝的 klipper 不知修改了什麼,更新 klipper 時會出現錯誤,執行下列指令再繼續更新

$ update klipper 時出現下面的錯誤

Updating 3387a9c2..6cd17420
error: Your local changes to the following files would be overwritten by merge:
	klippy/extras/virtual_sdcard.py
Please commit your changes or stash them before you merge.
Aborting

# 解決辦法
$ cd ~/klipper
$ git config --global user.email "you@example.com"
$ git config --global user.name "Your Name"

$ git stash
Saved working directory and index state WIP on master: 3387a9c2 
config: Use printer-creality-ender3-s1-2021.cfg for both s1 and s1 pro.

因為要使用 klicky probe 的 Automatic Z-Calibration 功能,必須安裝相關程式 protoloft / klipper_z_calibration,才能使用。安裝方式,參考 How To Install It

使用 Manual Installation,比較知道裝了些什麼。只要

除錯

使用 mincom 來連接,因權限問題,直接使用 sudo 來執行。

---------------------------------------------
# minicom -b 1500000 -D /dev/ttyUSB0

歡迎使用 minicom 2.8

選項: I18n 
編譯於 Jan  9 2021, 12:42:45.
通訊埠 /dev/ttyUSB0, 19:56:30

按 CTRL-A Z 說明特殊鍵                                                  
按 reset 之後,出現下面的錯誤訊息。只有在插入 TF 卡之後,才會出現下面的訊息。若沒插卡,則完全沒有訊息。所以,這段程式是在 TF 卡上,而非在 SOC 的 flash 裡。
 
DDR version 1.16 20190528                                            
ID:0x805 N                                                        
In                                                                
DDR3
333MHz
 data training error 
ERR
---------------------------------------------

正常的板子,按 RESET 重新啟動後的訊息如下。

---------------------------------------------
DDR version 1.16 20190528
ID:0x805 N
In
DDR3
333MHz
Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Die Bus-Width=16 Size=1024MB
ddrconfig:1
OUT
Boot1 Release Time: May 13 2019 17:34:36, version: 2.50
ChipType = 0x11, 232
mmc2:cmd19,100
SdmmcInit=2 0
BootCapSize=2000
UserCapSize=29820MB
FwPartOffset=2000 , 2000
SdmmcInit=0 NOT PRESENT
StorageInit ok = 12018
Raw SecureMode = 0
---------------------------------------------

慢慢地追,才知道這訊息是 rk3288 CPU 的 u-boot 發出的錯誤訊息,原始碼在 drivers/ram/rockchip/sdram_rk3328.c。看來是 DDR3 記憶體出問題,難道是冷焊嗎? 可以用熱風槍吹嗎?

source code: sdram_rk3328.c
---------------------------------------------

static int sdram_init(struct dram_info *dram,
      struct rk3328_sdram_params *sdram_params, u32 pre_init)
{
struct sdram_cap_info *cap_info = &sdram_params->ch.cap_info;
void __iomem *pctl_base = dram->pctl;

rkclk_ddr_reset(dram, 1, 1, 1, 1);
udelay(10);
/*
* dereset ddr phy psrstn to config pll,
* if using phy pll psrstn must be dereset
* before config pll
*/
rkclk_ddr_reset(dram, 1, 1, 1, 0);
rkclk_configure_ddr(dram, sdram_params);

/* release phy srst to provide clk to ctrl */
rkclk_ddr_reset(dram, 1, 1, 0, 0);
udelay(10);
phy_soft_reset(dram->phy);
/* release ctrl presetn, and config ctl registers */
rkclk_ddr_reset(dram, 1, 0, 0, 0);
pctl_cfg(dram->pctl, &sdram_params->pctl_regs, SR_IDLE, PD_IDLE);
cap_info->ddrconfig = calculate_ddrconfig(sdram_params);
set_ctl_address_map(dram, sdram_params);
phy_cfg(dram->phy, &sdram_params->phy_regs, &sdram_params->skew,
&sdram_params->base, cap_info->bw);

/* enable dfi_init_start to init phy after ctl srstn deassert */
setbits_le32(pctl_base + DDR_PCTL2_DFIMISC, (1 << 5) | (1 << 4));
rkclk_ddr_reset(dram, 0, 0, 0, 0);
/* wait for dfi_init_done and dram init complete */
while ((readl(pctl_base + DDR_PCTL2_STAT) & 0x7) == 0)
continue;

/* do ddr gate training */
if (data_training(dram, 0, sdram_params->base.dramtype) != 0) {
printf("data training error\n");
return -1;
}

if (sdram_params->base.dramtype == DDR4)
pctl_write_vrefdq(dram->pctl, 0x3, 5670,
  sdram_params->base.dramtype);

if (pre_init != 0) {
rx_deskew_switch_adjust(dram);
tx_deskew_switch_adjust(dram);
}

dram_all_config(dram, sdram_params);
enable_low_power(dram, sdram_params);

return 0;
}
---------------------------------------------

這篇是 Firefly 的 ROC-RK3328-PC 開發板的啟動過程的介紹 [Boot mode description]。無論如何,過不了 DDR 測試,進不了下一關,能做的事很有限,可能連啟動 jtag debug 都難。

maskrom 模式的 xrock 工具,不得已時,死馬當活馬醫,進入 maskrom 模式重燒 bootloader。bin 可在 rockchip-linux/rkbin 的 rkbin/bin /rk32/ 取得。

USB 2207:320C => Fuzhou Rockchip Electronics Company,RK3328 in Mask ROM mode






沒有留言:

張貼留言

網誌存檔