當前位置: 華文世界 > 數位

Linux其實不難,做個四層板設計的終端裝置就搞懂了!

2024-01-06數位

想掌握一個技能,還得靠實踐。

今天分享的DIY計畫有點勵誌。

其作者想學習Linux,於是花一個月時間邊學邊做,竟真成功開源出了一個—— 還不錯的 四層板設計 的 終端裝置

可能有人要問了,這終端裝置起到啥作用?哪好了?

說是個終端裝置,其實它可以是個 MP3 ,也可以是個 拓展塢 ……

相當於是一堆小產品集合於一塊電路板上。

話不多說,回歸正題!

下面就分享一下, 其軟硬體設計的教程 ,希望能對你有幫助!

開源計畫描述

做了一個基於V3S芯片的隨身終端,取名為V3S-PI。

功能有9個 ——獲取天氣、連耳機播放音樂、 10M/100M乙太網路介面 、連wifi、接入SD卡、調整螢幕亮度、按鍵控制、 外接其他裝置 1轉4 USB HUB

下面將分享其——芯片特性、計畫特性、 軟體開源 硬體開源

芯片特性

  • 處理器整合了單個arm Cortex-A7 CPU,CPU以1.2GHz執行,支持眾多外圍裝置
  • 512Mbt DDR2在V3中高度整合
  • SPINAND/ NOR快閃記憶體、SD / MMC有外部記憶體介面
  • 支持視訊引擎,格式如:720P @ 60FPS,H.264解碼器,1080p
  • 可滿足汽車數位視訊記錄(DVR)、IP攝影機(IPC)監控系統的需求
  • 計畫特性

  • 全誌V3S主控,采用單核Cortex-A7,帶硬體浮點
  • 芯片內封64Mbyte DDR2,無需外掛DDR2芯片
  • 支持RTL8723BS 2.4G WIFI(SDIO介面)
  • 透過Cp34R擴充套件雙USB口
  • 耳機介面采用V3S內建音效卡
  • 支持10M/100M乙太網路介面
  • 支持SDMMC介面,用於啟動系統
  • 支持Cp40N 串口轉USB,用於連線串口終端
  • 支持LRADC,四個ADC按鍵(暫未調通)
  • 2.4寸LCD彩屏,使用SPI介面
  • 2x8擴充套件介面,用於擴充套件I2C/UART
  • 軟體開源

    在目前網上資料的基礎上,作者自行移植了主線內核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介面與主控連線。

  • 軟體部份采用TinyDRM ,與傳統的fbtft相比, 不再是固定幀率重新整理
  • 采用DRM架構 ,可以與新架構程式更快整合。
  • 由於各家螢幕初始化程式碼不同,所以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 ,其中

  • 3.0V用於 PLL 以及 AVCC模擬供電
  • 3.3V負責 芯片IO 以及其他 外設供電
  • 1.8V用於 記憶體供電
  • 1.2V用於V3S核心 主控供電
  • 三路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與主控進行通訊。

  • PE8接彩屏重設線
  • PE9接DC
  • 用於區分數據/指令。

    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連線到一起即可。

  • XI XO輸入12Mhz晶振
  • DPU/DMU接上行USB口
  • 圖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·頭條號

    關註我,看一手優質開源計畫