0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

看頂尖芯片公司工程師寫總結(jié)報告

電子森林 ? 來源:FPGA入門到精通 ? 作者:FPGA入門到精通 ? 2020-10-30 17:06 ? 次閱讀

Seeed STM32MP157C EVK開發(fā)板試用報告概述安裝系統(tǒng)和必要的系統(tǒng)工具包 通過SD卡燒寫系統(tǒng) 升級系統(tǒng) 常規(guī)軟件安裝 PC機工具軟件通過GPIO控制小燈閃爍通過I2C同PCA9685通信控制舵機心得體會

概述 在第一期FunPack活動中,我使用Seeed STM32MP157C板子,實現(xiàn)了兩個小程序:

通過GPIO控制小燈閃爍

通過I2C同PCA9685舵機控制板通信, 從而控制SG90舵機

同以往開發(fā)MCU的思路不同,這次的開發(fā)平臺是運行了Linux系統(tǒng)的MPU平臺,因此不適合使用MCU開發(fā)中基于芯片手冊和讀寫寄存器編程思路。既然使用了Linux系統(tǒng),,那么自然要利用Linux平臺下軟件豐 富,通用性強的便利。在這次學(xué)習(xí)過程中,我在Linux平臺上,分別使用了Seeed公司開發(fā)的grove.py代碼包和Adafruit公司開發(fā)的adafruit_python_pca9685工具包,訪問底層的GPIO和I2C外設(shè)模塊。這些代碼包已經(jīng)對底層的操作,包括Linux操作系統(tǒng)層面上和芯片硬件層面上,都已經(jīng)進行了充分的封裝,我在自己 的程序文件中,只要根據(jù)文檔說明調(diào)用API即可,同時,python語言的運行環(huán)境相對于基于C的嵌入式系統(tǒng)開發(fā)環(huán)境十分友好,我沒有在搭建工程框架上(需要研究啟動代碼,鏈接命令文件,查閱芯片手冊中的寄存器等等)花費任何時間,短短幾行代碼就能實現(xiàn)我想要的功能。 下面具體說明我實現(xiàn)這兩個小程序的操作步驟:

安裝系統(tǒng)和必要的系統(tǒng)工具包

這部分內(nèi)容主要參考Seeed官方的wiki:https://wiki.seeedstudio.com/ODYSSEY-STM32MP157C/ 通過SD卡燒寫系統(tǒng)具體操作過程可參見wiki說明,這里簡述一下其中的思路:首先通過電腦上的一個燒寫工具軟件,將Linux系統(tǒng)的鏡像文件燒寫到SD卡上。將SD卡插入開發(fā)板,首次啟動一定要從SD卡啟動,然后運行SD卡系統(tǒng)中的腳本,將SD卡中的系統(tǒng)復(fù)制到板載的eMMC存儲芯片上,這相當(dāng)于是想eMMC存儲芯片安裝系統(tǒng)。然后通過板子的撥碼開關(guān)切換到從eMMC啟動,之后拔出SD卡重新啟動,系統(tǒng)就從eMMC中啟動并運行了。SD 卡在這個過程中相當(dāng)于是一個"安裝光盤",板載的eMMC存儲芯片就是系統(tǒng)里的硬盤。安裝系統(tǒng)之后就不 需要SD卡了。

sudo sh -c "echo cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3-stm32mp1.sh >> /boot/uEnv.txt"sudo reboot 升級系統(tǒng)燒寫系統(tǒng)后,必須先要升級系統(tǒng),否則很多更新過的軟件無法正常安裝。

sudo apt update 常規(guī)軟件安裝linux系統(tǒng)頭文件

sudo apt install linux-headers-$(uname -r) -y build管理: make

sudo apt install make device-tree-compiler gcc -y 遠程登錄: ssh

sudo apt install ssh -y 代碼倉庫下載: git

sudo apt install git -y 常規(guī)下載工具: wget

sudo apt install wget -y 編程和腳本語言python

sudo apt updatesudo apt install python3 python3-distutils python3-pyqt5 python3-pip python3-numpy -ysudopip3installpython-canpyqtgraph 設(shè)備管理器driver overlay下載并編譯stm32mp1的設(shè)備管理器:

git clone https://github.com/Seeed-Studio/seeed-linux-dtverlayscd seeed-linux-dtverlaysmake all_stm32mp1 CUSTOM_MOD_FILTER_OUT="jtsn-wm8960" && sudo make install_stm32mp1 CUSTOM_MOD_FILTER_OUT="jtsn-wm8960" ? 設(shè)定啟動后自動加載設(shè)備:

sudo sh -c "echo uboot_overlay_addr0=/lib/firmware/stm32mp1-seeed-ap6236-overlay.dtbo >> /boot/uEnv.txt"sudo sh -c "echo uboot_overlay_addr1=/lib/firmware/stm32mp1-seeed-spi5-overlay.dtbo >> /boot/uEnv.txt"sudo sh -c "echo uboot_overlay_addr2=/lib/firmware/stm32mp1-seeed-usart2-overlay.dtbo >> /boot/uEnv.txt"sudo sh -c "echo uboot_overlay_addr3=/lib/firmware/stm32mp1-seeed-i2c4-overlay.dtbo >> /boot/uEnv.txt"sudo reboot ? driver overlay相當(dāng)于是一個系統(tǒng)中注冊過的設(shè)備管理器,主要是在樹莓派的linux系統(tǒng)中使用。一些專門 的可以操縱底層硬件的python軟件庫,會通過注冊到driver overlay中的設(shè)備操作硬件。 PC機工具軟件我使用Windows系統(tǒng)作為PC機的主系統(tǒng)。畢竟Windows的各種桌面工具十分完善,日常用起來十分方便。 Tera Team在Windows下運行的終端工具,在本例中,可以連UART串口,也可以連ssh。

WinSCPWinSCP是通過ssh向linux目標(biāo)系統(tǒng)傳送文件的工具。在實際開發(fā)過程中,我都是預(yù)先在Windows上使用我熟悉的各種代碼編輯器寫好代碼文件,然后通過WinSCP上傳至linux目標(biāo)系統(tǒng)。雖然我也會在必要的情況下使用linux命令行窗口中的vim和nano,但總歸是用windows在圖形用戶界面中編輯代碼更加高效。 實際上,也可以再WinSCP的登錄窗口中直接打開linux目標(biāo)系統(tǒng)中的文件,編輯后保存,WinSCP會自動將最后保存的文件同步到遠程的linux目標(biāo)系統(tǒng)中。

通過GPIO控制小燈閃爍 不同于以往寫MCU程序時,需要通過查閱硬件手冊查找合適的寄存器,進而控制硬件。在本例中,我既然使 用了Linux平臺,就要充分發(fā)揮Linux平臺上工具豐富的特點。為了控制GPIO引腳上的輸出輸出電平信號,我使用了grove的工具包。 由于在準備系統(tǒng)平臺過程中,已經(jīng)編譯和安裝了seeed-linux-dtverlays,接下來可以直接安裝grove.py軟件包:

sudo pip3 install Seeed-grove.py 如果熟悉grove.py的話,此時已經(jīng)可以開始開發(fā)了。我是第一次使用這個工具包,下載了grove.py的源碼倉庫,然后從中找到一些樣例代碼。 這里不得不吐槽一下,grove.py的wiki網(wǎng)站框架是很不錯的,但是里面的內(nèi)容還亟待完善,目前還需要用戶通過閱讀源碼才能了解到少量API的用法,并且大部分樣例僅僅支持grove專用的硬件模塊,沒有提供說明如何使用用戶diy的電路模塊。 我最終是參考"~/grove.py/grove"目錄下的"grove_gpio.py"和"grove_led.py"兩個源碼文件,整理出一份 最簡單操作GPIO代碼。

import timefrom grove.gpio import GPIO led = GPIO(0, GPIO.OUT) while True: led.write(1) time.sleep(1) led.write(0) time.sleep(1) ? 至于GPIO引腳編號,相關(guān)的文檔沒有說明,我也沒有在代碼中深究。但是,考慮到這塊板子在設(shè)計之初是要兼容樹莓派的軟件生態(tài),我抱著試一試的心態(tài),找了張樹莓派的引腳圖,對應(yīng)連上我之前做實驗用的 LED燈小電路,竟然能夠工作了。

特別要注意,grove.gpio中對GPIO引腳的編號使用的是上表中的"BCM編碼"。

通過I2C同PCA9685通信控制舵機 grove.py中也有支持i2c通信的模塊, 例如可以通過如下代碼引入"Bus"類

from grove.i2c import Bus grove.py中也提供了大量的i2c設(shè)備的樣例代碼,但沒有支持PCA9685芯片的。我本意是打算參考樣例代碼寫一個PCA9685芯片的類。grove.py中i2c設(shè)備類實現(xiàn)的套路是:先使用變量的方式定義I2C設(shè)計的寄存 器,然后實現(xiàn)類內(nèi)的初始化,讀取,寫入等基本API,然后進一步封裝功能。 首先用杜邦線將連線將Seeed STM32MP157C板子同PCA9685電路板連起來,并且將一個SG90舵機連到 PCA9685電路板上。

寫代碼之前,我還使用了i2cdetect工具掃描了一下i2c總線上的設(shè)備地址。 安裝i2cdetect工具:

sudo apt-get install i2c-tools 執(zhí)行掃描:

i2cdetect -y 1

i2c0總線上沒掃到設(shè)備,就在i2c1上試試,果然識別到了PCA9685芯片,其中"0x40"是芯片的讀寫訪問地 址,"0x70"是一個廣播地址,暫時不用管它。 我甚至已經(jīng)編寫好測試通信的代碼:

import timefrom grove.i2c import Bus class GroveI2cPca9685: def __init__(self, bus=None, address=0x40): self.address = address self.bus = Bus(bus) def read_mode1(self): return self._read_byte(0x00) def read_mode2(self): return self._read_byte(0x01) # i2c bus. def _read_byte(self, reg): return self.bus.read_byte_data(self.address, reg) def main(): pca9685 = GroveI2cPca9685() print(pca9685.read_mode1()) print(pca9685.read_mode2()) if __name__ == '__main__':main() 用邏輯分析儀抓了i2c通信總線上的波形,看起來一切工作正常。

但我無意中在github上找到一個專門在Linux上驅(qū)動PCA9685芯片的項目"Adafruit_Python_PCA9685"。這是一個基于樹莓派Linux的項目,不過,這塊板子不就是兼容樹莓派的軟件么? 哈哈,省了我不少事情,直 接安裝并使用。 可以通過pip安裝"adafruit-pca9685"軟件包:

sudo pip install adafruit-pca9685 當(dāng)然, 也可以通過下載源碼安裝的方式安裝:

sudo apt-get install git build-essential python-devcd ~ git clone https://github.com/adafruit/Adafruit_Python_PCA9685.gitcd Adafruit_Python_PCA9685sudo python setup.py install 然后基于 "Adafruit_Python_PCA9685/examples/simpletest.py"文件中的源碼編寫代碼控制我自己的舵機:

from __future__ import divisionimport time # Import the PCA9685 module.import Adafruit_PCA9685 # Uncomment to enable debug output.#import logging#logging.basicConfig(level=logging.DEBUG) # Initialise the PCA9685 using the default address (0x40).pwm = Adafruit_PCA9685.PCA9685() # Alternatively specify a different address and/or bus:#pwm = Adafruit_PCA9685.PCA9685(address=0x41, busnum=2) # Configure min and max servo pulse lengthsservo_min = 150 # Min pulse length out of 4096servo_max = 620 # Max pulse length out of 4096 # Set frequency to 60hz, good for servos.pwm.set_pwm_freq(60) print('Moving servo on channel 15, press Ctrl-C to quit...')while True: # Move servo on channel 15 between extremes. pwm.set_pwm(15, 0, servo_min) time.sleep(1) pwm.set_pwm(15, 0, servo_max) time.sleep(1) 其中:

set_pwm_freq(60)函數(shù)設(shè)定了控制舵機的PWM方波信號頻率為60Hz;

set_pwm()函數(shù)的第一個參數(shù)是通道號,我特別連了15號通道而不是0通道,就是擔(dān)心此處的"0"同眾 多的"0"混在一起。后面的兩個參數(shù)分別是設(shè)置在一個周期中拉高電平和拉低電平的時間點,固定拉高電平的時間點為0,改變拉低電平的時間點就能控制舵機中電機的通電時間,從而控制舵機轉(zhuǎn)動的角度。

運行程序后, 確實可以看到我的小舵機在左右搖頭。Bingo! PS:我后來又看了一些使用PCA9685模塊配合多個舵機和一些3D打印的機械結(jié)構(gòu)設(shè)計制作的多足機器人的,我猜想控制算法多半已經(jīng)有開源的方案,尤其在Linux平臺上(樹莓派)移植這么方便,我果斷又下單買 了10個SG90舵機,又找了找開源的4足機器人機械結(jié)構(gòu)的3D打印圖紙,打算也搞一個小機器人玩玩。欲知 后事如何,那應(yīng)該是另一篇文章里要介紹的內(nèi)容了。

心得體會 Seeed STM32MP157C EVK板的軟件開發(fā)者致力于兼容已經(jīng)非常成熟的"樹莓派"生態(tài)環(huán)境,通過Linux系 統(tǒng)對底層的電路系統(tǒng)進行了封裝,因此有很多為"樹莓派"開發(fā)的軟件包可以直接運行在Seeed STM32MP157C EVK開發(fā)板上,這就為玩家提供了非常大的便利。 作為長期從事MCU開發(fā)的嵌入式系統(tǒng)工程師,這次"跨界"使用MPU,我從一個新的思路考慮開發(fā)手段。MCU開發(fā)的特點在于靈活性,可以為具體應(yīng)用專門量身設(shè)計軟硬件系統(tǒng)。而MPU開發(fā)過程對各個環(huán)節(jié)就 區(qū)分得更精細:底層軟件開發(fā)者對底層電路系統(tǒng)和軟件系統(tǒng)進行封裝,向應(yīng)用層開發(fā)者提供一個通用的開 發(fā)平臺;應(yīng)用層開發(fā)者不需要考慮底層的實現(xiàn),基于跨平臺的通用API編寫應(yīng)用程序。在通用平臺(Linux)上 開發(fā)的軟件可以在不同電路板上無縫復(fù)用。 新的開發(fā)體驗讓我驚喜不少,擺脫了對著寄存器手冊和原理圖的調(diào)試過程,直接專注于應(yīng)用業(yè)務(wù)邏輯的開發(fā),大幅縮短開發(fā)周期。python語言和有大量可用的工具軟件包也讓我可以不用每次實現(xiàn)功能組件時都 要重復(fù)"造輪子",或者小心地處理在別的芯片上移植過來的軟件中存在的各種不兼容的問題??傊褪且粋€字,"爽" ! END

更多精彩視頻分享請移步至硬禾學(xué)堂BBS論壇(也歡迎大家在本論壇里展開交流):https://bbs.eetree.cn/forum.php?mod=forumdisplay&fid=53

往期精彩

1. Funpack第一期開始Fund Back了,成功的同學(xué)都奔走相告,分享喜悅吧!

2. Funpack第一期精彩之二:Argon帶你用mqtt連OneNET,漂移菌帶你跑Linux和驅(qū)屏幕

責(zé)任編輯:xj

原文標(biāo)題:看頂尖芯片公司工程師寫總結(jié)報告(Funpack第一期精彩之三)

文章出處:【微信公眾號:FPGA入門到精通】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 芯片
    +關(guān)注

    關(guān)注

    450

    文章

    49636

    瀏覽量

    417195
  • 工程師
    +關(guān)注

    關(guān)注

    59

    文章

    1561

    瀏覽量

    68313
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

    352499

原文標(biāo)題:看頂尖芯片公司工程師寫總結(jié)報告(Funpack第一期精彩之三)

文章出處:【微信號:xiaojiaoyafpga,微信公眾號:電子森林】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    正是拼的年紀|65歲電子工程師上班VLOG #65歲退休 #電子工程師 #搞笑 #上班vlog

    電子工程師
    安泰小課堂
    發(fā)布于 :2024年07月25日 11:31:02

    用二創(chuàng),1:1復(fù)刻工程師的職場現(xiàn)狀

    工程師
    揚興科技
    發(fā)布于 :2024年07月19日 18:30:07

    嵌入式軟件工程師和硬件工程師的區(qū)別?

    嵌入式軟件工程師和硬件工程師的區(qū)別? 嵌入式軟件工程師 嵌入式軟件工程師是軟件開發(fā)領(lǐng)域中的一種專業(yè)工程師,他們主要負責(zé)設(shè)計和開發(fā)嵌入式軟件,
    發(fā)表于 05-16 11:00

    大廠電子工程師常見面試題#電子工程師 #硬件工程師 #電路知識 #面試題

    電子工程師電路
    安泰小課堂
    發(fā)布于 :2024年04月30日 17:33:15

    企業(yè)老工程師和高校老師有啥區(qū)別

    電子工程師硬件
    電子發(fā)燒友網(wǎng)官方
    發(fā)布于 :2024年02月28日 17:50:00

    智能手機飛速發(fā)展的十年回顧總結(jié)

    又到了每年年底總結(jié)報告的時候了,讓我們一起回顧下智能手機飛速發(fā)展的十年。
    的頭像 發(fā)表于 12-05 10:56 ?1606次閱讀
    智能手機飛速發(fā)展的十年回顧<b class='flag-5'>總結(jié)</b>

    FPGA工程師需要具備哪些技能?

    FPGA(Field-Programmable Gate Array)芯片因其具有靈活性、高定制化、高性能等特點,被廣泛應(yīng)用于數(shù)字系統(tǒng)設(shè)計、嵌入式系統(tǒng)、通信系統(tǒng)、計算機視覺等領(lǐng)域。作為FPGA工程師
    發(fā)表于 11-09 11:03

    工程師筆記——MM32F0040使用總結(jié)

    工程師筆記——MM32F0040使用總結(jié)
    的頭像 發(fā)表于 10-26 18:09 ?431次閱讀
    <b class='flag-5'>工程師</b>筆記——MM32F0040使用<b class='flag-5'>總結(jié)</b>