想掌握一個技能,還得靠實踐。
今天分享的DIY計畫有點勵誌。
其作者想學習Linux,於是花一個月時間邊學邊做,竟真成功開源出了一個—— 還不錯的 四層板設計 的 終端裝置 。
可能有人要問了,這終端裝置起到啥作用?哪好了?
說是個終端裝置,其實它可以是個 MP3 ,也可以是個 拓展塢 ……
相當於是一堆小產品集合於一塊電路板上。
話不多說,回歸正題!
下面就分享一下, 其軟硬體設計的教程 ,希望能對你有幫助!
開源計畫描述
做了一個基於V3S芯片的隨身終端,取名為V3S-PI。
功能有9個 ——獲取天氣、連耳機播放音樂、 10M/100M乙太網路介面 、連wifi、接入SD卡、調整螢幕亮度、按鍵控制、 外接其他裝置 、 1轉4 USB HUB 。
下面將分享其——芯片特性、計畫特性、 軟體開源 、 硬體開源 。
芯片特性
計畫特性
軟體開源
在目前網上資料的基礎上,作者自行移植了主線內核Uboot以及root。 目前僅支持SD卡以及SPI Nor啟動 ,SPI Nand啟動請不要參考當前程式碼。
①UBoot
快速開始
git clone https://gitee.com/fhcloud/uboot-v3scd uboot-v3smake v3s_pi_defconfigmake
輸出的檔在源碼根目錄u-boot-sunxi-with-spl.bin
②Linux
快速開始
git clone https://gitee.com/fhcloud/linux-v3scd linux-v3smake v3s_pi_defconfigmake
輸出的內核檔在arch/arm/boot/zImage
輸出的裝置樹請使用arch/arm/boot/dts/sun8i-v3s-pi.dtb
③Buildroot
快速開始
git clone https://gitee.com/fhcloud/buildroot-v3s.gitcd buildroot-v3smake v3s_pi_defconfigmake
輸出的檔在output/images/rootfs.tar
測試映像帳號root,密碼123456
我是分割線
軟體方案
關於軟體方案,主要講這 8個部份
——Linux內核、2.4寸LCD彩屏驅動、USB、乙太網路、無線網卡RTL8723BS、ADC按鍵、音訊播放、libcurl。
①Linux內核
內核 采用Linux5.15.143主線內核 ,在其基礎上,修改了部份程式碼,適配V3S大部份外設。
②2.4寸LCD彩屏驅動
LCD彩屏使用SPI介面與主控連線。
由於各家螢幕初始化程式碼不同,所以st7735r.c檔在原來的基礎上,我們只需修改st7735r_pipe_enable這個函式中的程式碼即可。
修改完成的程式碼參考下方檔 ,裝置樹配置參考:
&spi0 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi0_pins>; display@0 { compatible = "jianda,jd-t18003-t01"; reg = <0>; spi-max-frequency = <95000000>; backlight = <&panel_backlight>; dc-gpios = <&pio 4 9 0>; // PE9 reset-gpios = <&pio 4 8 0>; // PE8 rotation = <0>; };};
除spi外,需要添加一個背光節點 ,這樣就可以在使用者層操作背光:
panel_backlight: panel-backlight { compatible = "gpio-backlight"; gpios = <&pio 4 7 GPIO_ACTIVE_HIGH>; // PE7 default-on; status = "okay"; };
③USB
裝置樹配置參考:
&usb_otg { dr_mode = "host"; // peripheral status = "okay";};&usbphy { status = "okay";};
除參照節點外, 一定要添加ochi/echi ,不然USB插入會沒有反應:
soc { ehci0: usb@01c1a000 { compatible = "allwinner,sun8i-v3s-ehci", "generic-ehci"; reg = <0x01c1a000 0x100>; interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>; clocks = <&ccu CLK_BUS_EHCI0>, <&ccu CLK_BUS_OHCI0>; resets = <&ccu RST_BUS_EHCI0>, <&ccu RST_BUS_OHCI0>; status = "okay"; }; ohci0: usb@01c1a400 { compatible = "allwinner,sun8i-v3s-ohci", "generic-ohci"; reg = <0x01c1a400 0x100>; interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>; clocks = <&ccu CLK_BUS_EHCI0>, <&ccu CLK_BUS_OHCI0>, <&ccu CLK_USB_OHCI0>; resets = <&ccu RST_BUS_EHCI0>, <&ccu RST_BUS_OHCI0>; status = "okay"; }; };
④乙太網路
直接 參照DTSI檔中的emac節點 即可,裝置樹參考:
&emac { allwinner,leds-active-low; status = "okay";};
⑤無線網卡RTL8723BS
Linux下 SDIO架構類似於USB 。
——裝置插入後,如果有對應驅動,會自動載入。
所以裝置樹中,我們 只需要配置好MMC1介面 ,然後 編譯對應的驅動ko , 在rootfs中載入 即可。
裝置樹配置參考下方:
&mmc1 { broken-cd; bus-width = <4>; vmmc-supply = <®_vcc3v3>; status = "okay";};
編譯完成的ko檔在buildroot的overlay目錄下面,可以參考下方資料:
r8723bs.ko就是編譯完成的內核模組 ,此處的模組backport了5.19內核的驅動,相比於5.15的驅動 更加穩定 。
除ko檔外,此處 還需要載入網卡固件 ,參考下方目錄:
rtl8723bs_nic.bin可以從github或者其他網站上找到。
連線WIFI請參考下方指令碼:
[root@buildroot ~]# cat conn.shmodprobe r8723bs.kowpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.confudhcpc -i wlan0
配置檔請參考下方:
ctrl_interface=/var/run/wpa_supplicantap_scan=1network={ ssid="###############" psk="###############"}
⑥ADC按鍵
測試檔已開源,不贅述,想直接用請【參考文末】的開源網址。
⑦音訊播放
Buildroot中整合了alsa, 預設音效卡會靜音 狀態,開啟終端, 輸入alsamixer ,首先 解除 靜音:
在當前界面, 選中Headphone ,然後 按下M鍵 解除靜音,然後使用鍵盤↑,調整音量到合適大小即可,界面可參考圖12所示:
alsamixer
調整完成後,輸入mpv 檔名 --no-video,插入耳機,即可實作音樂播放:
[root@buildroot ~]# mpv 2.flac --no-video Video --vid=1 [P] (mjpeg 500x500 1.000fps) (+) Audio --aid=1 (flac 2ch 48000Hz)File tags: Album: 西廂尋他 Title: 西廂尋他 Track: 1AO: [alsa] 48000Hz stereo 2ch s32A: 00:00:04 / 00:03:43 (2%)Exiting... (Quit)
命令提示字元顯示當前目錄。
編輯/etc/profile檔 ,添加一行:
export PS1='[\u@\h \w]\$ '
然後export /etc/profile 重新載入配置 即可。
⑧libcurl
透過libcurl獲取當前天氣。程式已開源,參考文末開源網址檢視。
硬體開源
硬體采用四層板設計,工具是嘉立創EDA,下面會將電路 拆分為11部份 ,逐一說明。
①主控部份
本計畫主控采用全誌V3S,需要註意的是, R3/R5電阻需使用1% ,同時,EPHY存在兩組電壓。
圖1 主控原理圖
②ADC按鍵
板載四個ADC按鍵,電壓跨度為 0.2V ,透過分壓電阻實作。
圖2 ADC按鍵
③2x16 PIN擴充套件介面
此處透過排針, 引出了8個擴充套件介面 ,包含了一個串口/一個I2C匯流排,可用於外接其他裝置。
圖3 擴充套件介面
④輔助供電
板載 四組供電芯片 ,分別產生 3.0V、3.3V、1.8V、1.2V ,其中
三路DCDC最大輸出電流2A。
圖4 輔助供電
⑤WIFI模組
板載 2.4G WIFI模組,使用RTL8723BS模組,V3S與WIFI模組之間采 用SDIO介面連線 ,引出一個 IPEX介面用於外接天線 ,R20-R27為SDIO和芯片要求的上拉電阻,C50/C51/C70為外圍濾波電容, 模組采用3.3V供電 。
圖5 WIFI模組原理圖
⑥10M/100M乙太網路介面
百兆乙太網路需要使用兩組差分,分別為RX/TX差分。乙太網路PHY一般帶自動翻轉功能,所以 RX/TX可以對調 。V3S乙太網路使用電壓驅動,只需 在網口變壓器中心抽頭處加100NF電容到地即可 。
內部封裝的 電阻 和 2KV電容 用於 泄放主機板的靜電 ,防止高壓打壞主控芯片。
R28/R29為LED限流電阻,Sp Sp為外殼,直接接地即可。
圖6 乙太網路介面原理圖
⑦2.4寸LCD彩屏
2.4寸彩屏透過SPI與主控進行通訊。
用於區分數據/指令。
LEDA為背光陽極,LEDK接Q1 MOS,用於主控 控制背光開關 。
螢幕透過 焊錫 焊接 到PCB板上。
圖7 2.4寸LCD彩屏原理圖
⑧Cp40 串口轉USB
使用Cp40N芯片,實作串口轉USB,用於電腦連線終端。
R30/R31 用於 確保 雙頭TYPEC線 正常供電 , D1 為TVS, 用於保護USB介面 ,此處使用3.3V供電,所以Cp40N的VCC和V3需要連線到一起,同時增加100nf電容。
圖8 Cp40串口轉USB
⑨Cp34R 1轉4 USB HUB
透過Cp34R芯片, 實作一轉四個USB Host口 。
此處采用統一供電,所以VDD33與V5連線到一起即可。
圖9 Cp34R原理圖
⑩耳機介面
耳機介面采用 PJ-342 介面,帶音訊和錄音:
圖10 PJ-342耳機介面
⑪SD卡介面
SD卡介面用於插入MicroSD卡。
R32-R36為SD卡上拉電阻,這裏 CLK不需要上拉 ,否則可能 會影響SDIO通訊 。
圖11 SD卡介面
結語
DIY這個計畫的成本不到100元。
在DIY期間,作者既收獲了一個實用的工具,還順利入門了Linux和四層板PCB設計,的確是一舉三得!
你覺得呢?
參考資料:
[1]https://oshwhub.com/fanhuacloud/v3s_lcd
— 完 —
嘉立創EDA·頭條號
關註我,看一手優質開源計畫