91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

物聯網的要點深入淺出

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-25 18:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

物聯網是與云計算相伴而生的,事實上,正是物聯網的概念幫我弄清了對云計算的工作定義。物聯網是一個由三個不同的子系統組成的系統:

·云

·聚合器

·智能傳感器

上述每一個子系統對于整個物聯網系統的功能優化都是必需的。云是終極的計算單元和通用通信網絡。智能傳感器是通向現實世界的界面。最后,這些聚合者是中間人。對云來說,聚合器看起來像智能傳感器,而對智能傳感器而言,它看起來像云。

系統的特點

系統的概念一直很有趣,這個術語引出了一些問題。例如,"一個系統存在的最小一組功能是什么?"或者,"一個系統可以由許多其他系統組成嗎?"物聯網是一個系統的系統。它的三個組件(云、聚合器和智能傳感器)都有自己的系統。此外,任何兩個組件也可以形成一個完整的IoT系統。例如,與聚合器進行通信的一系列智能傳感器可以成為許多應用的一個最佳系統。同時,智能傳感器直接對云進行通信也可以是一個最佳的系統。

然后,三者的區別是它們的具體性能,成本,功耗和規模的考量。特別是:

·云系統專注于性能。因此,成本、功耗和規模是次要的問題。

·聚合系統較少關注性能和功耗,更多地關注靈活性。

·智能傳感器系統集中在電池壽命、大小和成本上,性能處于第三優先級。

也許一個示例應用可以幫助把這些系統放到一個維度上:

“智能咖啡杯”可以用來展示智能傳感器如何直接與云進行通信。在最喜歡的咖啡館,要上一杯"無限續杯"的咖啡。我會在咖啡店工作幾個小時,不想每30分鐘起來去續杯咖啡。有了無限的杯子,我可以坐在自己的桌子上工作,而我的咖啡杯正在和咖啡店的"云"通信,那就是 WiFi。當云感覺到我的杯子溫度越來越低,或者變冷了,咖啡師會給我另外一個杯子,如果需要的話自動完成付費。這最終成為咖啡館現有云計算的一個新用途。它可以很容易地擴展到餐廳和飲品店。

當認為物聯網是一個系統系統時,有很多的方式。正如星球大戰三部曲是從中間開始的,然后進入過去和未來,討論IoT的三個系統也可以從中間開始,然后再到另外兩個。乍一看,聚合器看起來既像是智能傳感器上的云,又看起來像一個云上的智能傳感器,似乎是物聯網中不必要的組成部分。

IoT中的聚合子系統

看待物聯網的簡單方法是假設云直接連接到智能電子設備上。從這個意義上說,也許智能傳感器和聚合器的概念是同一裝置的變體。但是這個概念在每個IoT機會中都不起作用。

聚合器是一個處理元素,它:

·使用標準通信方法與云進行通信

·與具有專有通信功能的智能傳感器進行通信,在這些傳感器中,對長壽命和成本的需求超過了對標準的需求

·有足夠的處理性能來服務多個智能傳感器。在這樣做的過程中,它管理了來自大量智能傳感器的原始數據,消化它們的數據,準備一組需要傳送到云端的信息,然后將數據傳送到云端。

·在某些情況下,聚合器有足夠的自主權,可以作為該系統的云。

聚合器與其他兩個元素之間的差異如下:

聚合器是大量智能傳感器和云之間的通信鏈接,最好的例子就是智能手機。它具有合理的電池壽命、成本和性能。可以看到許多設備可以與智能手機進行物理連接,也可以通過無線網絡連接到智能手機上。它通常執行所有必要的功能,使其有用。但它總是無縫地涉及到云的性能,依賴于電池的壽命。為了充分發揮其潛力,需要有電源,或者將其可用性限制在相對較短的活動期間。這導致了聚合器的一個更廣泛方面。它需要成為許多智能傳感器之間的可連續供電接口,那些傳感器不是外部供電的,而云是具有無限性能的。

可以在工業控制和醫療嵌入式設備中找到其他聚合器的例子。在這些例子中,都有一些共同的特點: 微型計算機或微處理器,許多標準的接口實現和各種通信選項。它們的性能足以滿足系統的需求,而且它們的電力需求很低,足以使電池使用壽命合理,或者使用USB連接的電源供電。

對聚合器最簡單的描述就是它是一個獨立的計算機系統,它有

·計算系統

·電力管理系統

·存儲系統

·通訊系統

聚合器是一個獨立的系統,但它也可以是一個較大系統中的一個子系統。

聚合器可以使用帶有離散組件的印刷電路板(PCB)來設計聚合器,或者在模塊(SOM)上的系統,或者一個包中的系統(SiP) ,或芯片上的系統(SoC)。一般而言,采取的這些形式中哪一種形式更多地取決于規模和靈活性的限制,而不是成本和性能限制。

技術已經允許減少聚合器的尺寸,它也將減少其組件的大小。令人驚訝的是,它并不依賴于提高原始性能或驅動集成。創造小型設備如智能塵埃的意圖要求計算機的功耗低到足以更好的散熱。聚合器將需要一個超低功耗的通信鏈接與許多智能傳感器(也許是數千個)來通信并聚合它收到的數據信息。它將把這些信息發送到云端進行最后的處理。與云計算的通信將采用行業標準方法進行。與智能傳感器的通信很可能是專有的,而不是標準的,以在其所需的通信速率中保證最小的功率耗散。

IoT中的云

云的作用是兩個基本的功能: 與用戶交流,并給出額外的表現,甚至用戶可能不知道那些需求。云計算的概念可能是用一個愚蠢的方式來描述了互聯網的復雜性和它所做的一切。

物聯網的概念不僅僅是描述云,還包括云是其中一部分的更廣泛的生態系統。這個概念使得云計算成為一個更大系統的組成部分。微控制器和微處理器的多樣性能夠融入這個生態系統。

當云從概念演變為現實的時候,它似乎提供了無限的通信帶寬、無限的性能和完全的安全性——但是,所有這些假設都可能是謊言。圖1描述了物聯網的各個組成部分的性能、帶寬和安全性。

審核編輯:符乾江

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 云計算
    +關注

    關注

    39

    文章

    7976

    瀏覽量

    140163
  • 物聯網
    +關注

    關注

    2931

    文章

    46263

    瀏覽量

    392872
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    聯網藍牙模塊有哪些優勢?

    隨著聯網技術的不斷發展,藍牙模塊作為聯網的重要組成部分,其應用越來越廣泛。那么,聯網藍牙模
    發表于 06-28 21:49

    聯網的應用范圍有哪些?

    聯網,簡單來說,就是“萬相連的互聯網”。它以互聯網為基石,將用戶端延伸至物品與物品之間,實現信息的交換與通信。打個比方,你的智能手表能實
    發表于 06-16 16:01

    程序設計與數據結構

    的地址)出發,采用推導的方式,深入淺出的分析了廣大C程序員學習和開發中遇到的難點。 2. 從方法論的高度對C語言在數據結構和算法方面的應用進行了深入講解和闡述。 3. 講解了絕大多數C程序員開發
    發表于 05-13 16:45

    深入淺出解析低功耗藍牙協議棧

    深入Bluetooth LE協議棧各個組成部分之前,我們先看一下Bluetooth LE協議棧整體架構。 如上圖所述,要實現一個Bluetooth LE應用,首先需要一個支持Bluetooth
    的頭像 發表于 04-09 14:49 ?539次閱讀
    <b class='flag-5'>深入淺出</b>解析低功耗藍牙協議棧

    《零基礎開發AI Agent——手把手教你用扣子做智能體》

    《零基礎開發AI Agent——手把手教你用扣子做智能體》是一本為普通人量身打造的AI開發指南。它不僅深入淺出地講解了Agent的概念和發展,還通過詳細的工具介紹和實戰案例,幫助讀者快速掌握
    發表于 03-18 12:03

    為什么選擇蜂窩聯網

    在為您的聯網(IoT)應用評估最合適的低功耗廣域網(LPWAN)技術時,除了考慮技術指標外,還必須考慮各種因素,因為技術指標本身可能與實際性能大相徑庭。與 LoRaWAN、Sigfox
    發表于 03-17 11:42

    宇樹科技在聯網方面

    標準制定,不僅可以提升自身在行業內的影響力和話語權,還可以推動整個機器人產業在聯網時代的健康發展。 綜上所述,宇樹科技在聯網領域展現出了全面的布局和
    發表于 02-04 06:48

    聯網就業有哪些高薪崗位?

    進行分析和挖掘,提供有價值的信息和見解,以支持決策和業務發展。對于數據科學和人工智能有深入了解的數據分析專家,將迎來更多的高薪崗位機會。 聯網產品經理: 負責對
    發表于 01-10 16:47

    深居AutoCAD二次開發

    深居AutoCAD二次開發,net版
    發表于 01-06 14:12 ?9次下載

    深入淺出RISC-V調試

    一、JTAG簡介 目前RISC-V官方支持的調試方式是JTAG(Joint Test Action Group),而ARM支持的調試方式有JTAG和SWD(Serial Wire Debug)這兩種。 JTAG是一種國際標準的調試方式(IEEE1149.1),而SWD是ARM開發的。標準JTAG采用四線方式,分別是TCK、TMS、TDI和TDO,有一個可選的TRST引腳。 ● TCK:測試時鐘輸入。 ● TMS:測試模式選擇。 ● TDI:測試數據輸入。 ● TDO:測試數據輸出。 在調試時需要用到一個工具,比如JLink或者CMSIS-DAP,對于這個工具,在這里稱為JTAG主機(JTAG host),而嵌入在芯片內部的JTAG稱為JTAG從機(JTAG slave),需要注意的是上面這些信號的輸入輸出方向是對于JTAG從機來說的。下文中如無特別說明,JTAG都是指JTAG從機。 一個JTAG主機可以同時對多個JTAG從機進行調試,這通過JTAG掃描鏈(JTAG Scan Chain)完成,如圖1所示。 圖1 一個JTAG主機連接多個JTAG從機 JTAG內部有一個TAP(Test Access Port)控制器(或者說狀態機),通過TCK和TMS信號來改變狀態機的狀態。這個狀態機的核心是兩路SCAN,分別是IR SCAN和DR SCAN,TAP狀態機如圖2所示。 圖2 TAP狀態機 箭頭上的0或1表示的是TMS信號的電平。JTAG在每一個TCK信號的上升沿采樣TMS信號和TDI信號,決定狀態機的狀態是否發生變化,在每一個TCK信號的下降沿輸出TDO信號。可以看到,無論TAP目前處于哪一個狀態,只要TMS保持高電平并持續5個TCK時鐘,則TAP一定會回到Test-Logic-Reset狀態。 JTAG內部有一個IR(instruction register)寄存器和多個DR(data register)寄存器,IR寄存器決定要訪問的是哪一個DR寄存器。DR寄存器有IDCODE、BYPASS等。在Test-Logic-Reset狀態下IR寄存器默認選擇的是IDCODE這個DR寄存器。 JTAG主機通過IR SCAN設置IR寄存器的值,然后通過DR SCAN來讀、寫相應的DR寄存器。 二、RISC-V調試Spec 調試模塊在CPU芯片設計里是最為不起眼的,但又是最為復雜的模塊之一,大部分開源的處理器IP都沒有調試模塊。 下面的內容基于RISC-V debug spec 0.13版本。 目前RISC-V的官方調試上位機是openocd,調試工具可以是JLink或者CMSIS-DAP,RISC-V調試系統框架如圖3所示。 圖3 RISC-V調試系統框架 可以看到主要分為3個部分,分別是Debug Host,可以理解為PC;Debug Hardware,可以理解為JLink或者CMSIS-DAP這樣的調試工具;第三部分就是嵌入在芯片內部的調試模塊。在調試模塊內部,與調試工具直接交互的是DTM模塊,DTM模塊通過DMI接口與DM模塊交互。 1>DTM模塊 在DTM模塊里實現了一個TAP控制器(狀態機),其中IR寄存器的長度最少為5位,當TAP控制器復位時,IR的值默認為5\'b00001,即選擇的是IDCODE寄存器。DTM模塊的寄存器(DR寄存器)定義如圖4所示。 圖4 DTM寄存器 其中紅色框起來的寄存器是必須要實現的。下面簡單介紹一下這幾個寄存器。 ① IDCODE寄存器(0x01) 當TAP狀態機復位時,IR寄存器的值默認為0x01,即選擇的是IDCODE寄存器。IDCODE寄存器的每一位含義如圖5所示。IDCODE是只讀寄存器。 圖5 IDCODE寄存器 ● Version:只讀,版本號,可為任意值。 ● PartNumber:只讀,可為任意值。 ● Manufld:只讀,廠商號,遵循JEP106標準分配,實際中可為任意值,只要不與已分配的廠商號沖突即可。 ② DTM控制和狀態寄存器(dtmcs,0x10) dtmcs寄存器的每一位含義如圖6所示。 圖6 dtmcs寄存器 ● dmihardreset:DTM模塊硬復位,寫1有效。 ● dmireset:清除出錯,寫1有效。 ● idle:只讀,JTAG 主機在Run-Test-Idle狀態停留的時鐘周期數,0表示不需要進入Run-Test-Idle狀態,1表示進入Run-Test-Idle狀態后可以馬上進入下一個狀態,以此類推。 ● dmistat:只讀,上一次操作的狀態。0表示無出錯,1或者2表示操作出錯,3表示操作還未完成。 ● abits:只讀,dmi寄存器中address域的大小(位數)。 ● version:只讀,實現所對應的spec版本,0表示0.11版本,1表示0.13版本。 ③ DM模塊接口訪問寄存器(dmi,0x11) dmi寄存器的每一位含義如圖7所示。 圖7 dmi寄存器 ● address:可讀可寫,DM寄存器的長度(位數)。 ● data:可讀可寫,往DM寄存器讀、寫的數據,固定為32位。 ● op:可讀可寫,讀或者寫這個域時有不同的含義。當寫這個域時,寫0表示忽略address和data的值,相當于nop操作;寫1表示從address指定的寄存器讀數據;寫2表示把data的數據寫到address指定的寄存器。寫3為保留值。當讀這個域時,0表示上一個操作正確完成;1為保留值;2表示上一個操作失敗,這個狀態是會被記住的,因此需要往dtmcs寄存器的dmireset域寫1才能清除這個狀態。3表示上一個操作還未完成。 在Update-DR狀態時,DTM開始執行op指定的操作。在Capture-DR狀態時,DTM更新data域。 ④ BYPASS寄存器(0x1f) 只讀,長度為1,值固定為0。 2>DM模塊 從圖3可知,DM模塊訪問RISC-V Core有兩種方式,一種是通過abstract command,另一種是通過system bus。abstract command方式是必須要實現的,system bus的方式是可選的。 DM模塊的寄存器都為32位,定義如圖8所示。 圖8 DM寄存器 下面介紹一下紅色框起來這幾個重要的寄存器。 ① data寄存器(data0-data11,0x04-0x0f) 這12個寄存器是用于abstract command的數據寄存器,長度為32位,可讀可寫。 ② DM控制寄存器(dmcontrol,0x10) dmcontrol寄存器的每一位含義如圖9所示。 圖9 dmcontrol寄存器 ● haltreq:只寫,寫1表示halt(暫停)當前hart(hart表示CPU核,存在多核的情況)。 ● resumereq:只能寫1,寫1表示resume(恢復)當前hart,即go。 ● hartreset:可讀可寫,寫1表示復位DM模塊,寫0表示撤銷復位,這是一個可選的位。 ● ackhavereset:只能寫1,寫1表示清除當前hart的havereset狀態。 ● hasel:可讀可寫,0表示當前只有一個已經被選擇了的hart,1表示當前可能有多個已經被選擇了的hart。 ● hartsello:可讀可寫,當前選擇的hart的低10位。1位表示一個hart。 ● hartselhi:可讀可寫,當前選擇的hart的高10位。1位表示一個hart。如果只有一個hart,那么hasel的值為0,hartsello的值為1,hartselhi的值為0。 ● setresethaltreq:只能寫1,寫1表示當前選擇的hart復位后處于harted狀態。 ● clrresethaltreq:只能寫1,寫1表示清除setresethaltreq的值。 ● ndmreset:可讀可寫,寫1表示復位整個系統,寫0表示撤銷復位。 ● dmactive:可讀可寫,寫0表示復位DM模塊,寫1表示讓DM模塊正常工作。正常調試時,此位必須為1。 ③ DM狀態寄存器(dmstatus,0x11) dmstatus寄存器是一個只讀寄存器,每一位含義如圖10所示。 圖10 dmstatus寄存器 ● impebreak:1表示執行完progbuf的指令后自動插入一條ebreak指令,這樣就可以節省一個progbuf。當progbufsize的值為1時,此值必須為1。 ● allhavereset:1表示當前選擇的hart已經復位。 ● anyhavereset:1表示當前選擇的hart至少有一個已經復位。 ● allresumeack:1表示當前選擇的所有hart已經應答上一次的resume請求。 ● anyresumeack:1表示當前選擇的hart至少有一個已經應答上一次的resume請求。 ● allnonexistent:1表示當前選擇的hart不存在于當前平臺。 ● anynonexistent:1表示至少有一個選擇了的hart不存在于當前平臺。 ● allunavail:1表示當前選擇的hart都不可用。 ● anyunavail:1表示至少有一個選擇了的hart不可用。 ● allrunning:1表示當前選擇的hart都處于running狀態。 ● anyrunning:1表示至少有一個選擇了的hart處于running狀態。 ● allhalted:1表示當前選擇的hart都處于halted狀態。 ● anyhalted:1表示至少有一個選擇了的hart處于halted狀態。 ● authenticated:0表示使用DM模塊之前需要進行認證,1表示已經通過認證。 ● authbusy:0表示可以進行正常的認證,1表示認證處于忙狀態。 ● hasresethaltreq:1表示DM模塊支持復位后處于halted狀態,0表示不支持。 ● confstrptrvalid:1表示confstrptr0~3寄存器保存了配置字符串的地址。 ● version:0表示DM模塊不存在,1表示DM模塊的版本為0.11,2表示DM模塊的版本為0.13。 ④ abstract控制和狀態寄存器(abstractcs,0x16) abstractcs寄存器定義如圖11所示。 圖11 abstractcs寄存器 ● progbufsize:只讀,program buffer的個數,取值范圍為0~16,每一個的大小為32位。 ● busy:只讀,1表示abstract命令正在執行,當寫command寄存器后該位應該馬上被置位直到命令執行完成。 ● cmderr:可讀、只能寫1,cmderr的值僅當busy位為0時有效。0表示無錯誤,1表示正在操作command、abstractcs、data或者progbuf寄存器,2表示不支持當前命令,3表示執行命令時出現異常,4表示由于當前hart不可用,或者不是處于halted/running狀態而不能被執行,5表示由于總線出錯(對齊、訪問大小、超時)導致的錯誤,7表示其他錯誤。寫1清零cmderr。 ● datacount:只讀,所實現的data寄存器的個數。 ⑤ abstract命令寄存器(command,0x17) 當寫這個寄存器時,相應的操作就會被執行。command寄存器只能寫,定義如圖12所示。 圖12 command寄存器 ● cmdtype:只寫,命令類型,0為表示訪問寄存器,1表示快速訪問,2表示訪問內存。 ● control:只寫,不同的命令類型有不同的含義,說明如下。 當cmdtype為0時,control定義如圖13所示。 圖13 訪問寄存器 ● cmdtype:值為0。 ● aarsize:2表示訪問寄存器的最低32位,3表示訪問寄存器的最低64位,4表示訪問寄存器的最低128位。如果大于實際寄存器的大小則此次訪問是失敗的。 ● aarpostincrement:1表示成功訪問寄存器后自動增加regno的值。 ● postexec:1表示執行progbuf里的內容(指令)。 ● transfer:0表示不執行write指定的操作,1表示執行write指定的操作。 ● write:0表示從指定的寄存器拷貝數據到arg0指定的data寄存器。1表示從arg0指定的data寄存器拷貝數據到指定的寄存器。 ● regno:要訪問的寄存器。 綜上,可知: Ⅰ. 當write=0,transfer=1時,從regno指定的寄存器拷貝數據到arg0對應的data寄存器。 Ⅱ. 當write=1,transfer=1時,從arg0對應的data寄存器拷貝數據到regno指定的寄存器。 Ⅲ. 當aarpostincrement=1時,將regno的值加1。 Ⅳ. 當postexec=1時,執行progbuf寄存器里的指令。 arg對應的data寄存器如圖14所示。 圖14 arg對應的data寄存器 即當訪問的寄存器位數為32位時,arg0對應data0寄存器,arg1對應data1寄存器,arg2對應data2寄存器。 當cmdtype為1時,control定義如圖15所示。 圖15 快速訪問 ● cmdtyte:值為1。 此命令會執行以下操作: 1)halt住當前hart。 2)執行progbuf寄存器里的指令。 3)resume當前hart。 當cmdtype為2時,control定義如圖16所示。 圖16 訪問內存 ● cmdtype:值為2。 ● aamvirtual:0表示訪問的是物理地址,1表示訪問的是虛擬地址。 ● aamsize:0表示訪問內存的低8位,1表示訪問內存的低16位,2表示訪問內存的低32位,3表示訪問內存的低64位,4表示訪問內存的低128位。 ● aampostincrement:1表示訪問成功后,將arg1對應的data寄存器的值加上aamsize對應的字節數。 ● write:0表示從arg1指定的地址拷貝數據到arg0指定的data寄存器,1表示從arg0指定的data寄存器拷貝數據到arg1指定的地址。 ● target-specific:保留。 綜上,可知: Ⅰ. 當write=0時,從arg1指定的地址拷貝數據到arg0指定的data寄存器。 Ⅱ. 當write=1時,從arg0指定的data寄存器拷貝數據到arg1指定的地址。 Ⅲ. 當aampostincrement=1時,增加arg1對應的data寄存器的值。 ⑥ 系統總線訪問控制和狀態寄存器(sbcs,0x38) sbcs寄存器定義如圖17所示。 圖17 sbcs寄存器 ● sbversion:只讀,0表示system bus是2018.1.1之前的版本,1表示當前debug spec的版本,即0.13版本。 ● sbbusyerror:只讀,寫1清零,當debugger要進行system bus訪問操作時,如果上一次的system bus訪問還在進行中,此時會置位該位。 ● sbbusy:只讀,1表示system bus正在忙。在進行system bus訪問前必須確保該位為0。 ● sbreadonaddr:可讀可寫,1表示每次往sbaddress0寄存器寫數據時,將會自動觸發system bus從新的地址讀取數據。 ● sbaccess:可讀可寫,訪問的數據寬度,0表示8位,1表示16位,2表示32位,3表示64位,4表示128位。 ● sbautoincrement:可讀可寫,1表示每次system bus訪問后自動將sbaddress的值加上sbaccess的大小(字節)。 ● sbreadondata:可讀可寫,1表示每次從sbdata0寄存器讀數據后將自動觸發system bus從新的地址讀取數據。 ● sberror:可讀,寫1清零,0表示無錯誤,1表示超時,2表示訪問地址錯誤,3表示地址對齊錯誤,4表示訪問大小錯誤,7表示其他錯誤。 ● sbasize:只讀,system bus地址寬度(位數),0表示不支持system bus訪問。 ● sbaccess128:只讀,1表示system bus支持128位訪問。 ● sbaccess64:只讀,1表示system bus支持64位訪問。 ● sbaccess32:只讀,1表示system bus支持32位訪問。 ● sbaccess16:只讀,1表示system bus支持16位訪問。 ● sbaccess8:只讀,1表示system bus支持8位訪問。 ⑦ 系統總線地址0寄存器(sbaddress0,0x39) 可讀可寫,如果sbcs寄存器中的sbasize的值為0,那么此寄存器可以不用實現。 當寫該寄存器時,會執行以下流程: Ⅰ. 設置sbcs.sbbusy的值為1。 Ⅱ. 從新的sbaddress地址讀取數據。 Ⅲ. 如果讀取成功并且sbcs.sbautoincrement的值為1,則增加sbaddress的值。 Ⅳ. 設置sbcs.sbbusy的值為0。 ⑧ 系統總線數據0寄存器(sbdata0,0x3c) 可讀可寫,如果sbcs寄存器中的所有sbaccessxx的值都為0,那么此寄存器可以不用實現。 當寫該寄存器時,會執行以下流程: Ⅰ. 設置sbcs.sbbusy的值為1。 Ⅱ. 將sbdata的值寫到sbaddress指定的地址。 Ⅲ. 如果寫成功并且sbcs.sbautoincrement的值為1,則增加sbaddress的值。 Ⅳ. 設置sbcs.sbbusy的值為0。 當讀該寄存器時,會執行以下流程: Ⅰ. 準備返回讀取的數據。 Ⅱ. 設置sbcs.sbbusy的值為1。 Ⅲ. 如果sbcs.sbautoincrement的值為1,則增加sbaddress的值。 Ⅳ. 如果sbcs.sbreadondata的值為1,則開始下一次讀操作。 Ⅴ. 設置sbcs.sbbusy的值為0。 三、RISC-V調試上位機分析 RISC-V官方支持的調試器上位機是openocd。openocd是地表最強大(沒有之一)的開源調試上位機,支持各種target(ARM(M、A系列)、FPGA、RISC-V等),支持各種調試器(Jlink、CMSIS-DAP、FTDI等),支持JTAG和SWD接口。 這里不打算詳細分析整個openocd的實現,只是重點關注針對RISC-V平臺的初始化、讀寫寄存器和讀寫內存這幾個流程。 1>openocd啟動過程 openocd啟動時需要通過-f參數制定一個cfg文件,比如: openocd.exe -f riscv.cfg riscv.cfg文件的內容如下: adapter_khz1000 reset_config srst_only adapter_nsrst_assert_width 100 interface cmsis-dap transport select jtag set _CHIPNAME riscv jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x1e200a6d set _TARGETNAME $_CHIPNAME.cpu target create $_TARGETNAME riscv -chain-position $_TARGETNAME ■ 第一行設置TCK的時鐘為1000KHz。 ■ 第二行表示不支持通過TRST引腳復位,只支持TMS為高電平并持續5個TCK時鐘這種方式的復位。 ■ 第三行是復位持續的延時。 ■ 第四行指定調試器為CMSIS-DAP。 ■ 第五行指定調試接口為JTAG。 ■ 第六行指定調試的target類型為riscv。 ■ 第七行指定生成一個IR寄存器長度為5位、IDCODE為0x1e200a6d的JTAG TAP。 ■ 第八、九行指定生成一個riscv target。 openocd啟動時的主要流程如圖18所示。 圖18 openocd啟動流程 下面重點關注一下examine target這個流程。 這里的target是指riscv,對于riscv,首先會讀取dtmcontrol這個寄存器,因為openocd支持0.11和0.13版本的DTM,通過這個寄存器可以知道當前調試的DTM是哪一個版本。這里選擇0.13版本來分析。通過讀取dtmcontrol,還可以知道idle、abits這些參數。接下來會將dmcontrol這個寄存器的dmactive域寫0后再寫1來復位DM模塊。接下來再讀取dmstatus,判斷version域是否為2。接下來還會讀取sbcs和abstractcs寄存器,最后就是初始化每一個hart的寄存器。 2>read register過程 讀寄存器時,先構建command寄存器的內容,首先將cmdtype的值設為0,aarsize的值設為2(寄存器的寬度為32位),transfer的值設為1,regno的值設為要讀的寄存器的number,其他值設為0,然后寫到command寄存器里。然后一直讀取abstractcs寄存器,直到abstractcs寄存器的busy位為0或者超時。然后再判斷abstractcs寄存器的cmderr的值是否為0,如果不為0則表示此次讀取寄存器失敗,如果為0則繼續讀取data0寄存器,這樣就可以得到想要讀的寄存器的值。 3>write register過程 寫寄存器時,先將需要寫的值寫到data0寄存器,然后構建command寄存器的內容,首先將cmdtype的值設為0,aarsize的值設為2(寄存器的寬度為32位),transfer的值設為1,write的值設為1,regno的值設為要寫的寄存器的number,其他值設為0,然后寫到command寄存器里。然后一直讀取abstractcs寄存器,直到abstractcs寄存器的busy位為0或者超時。然后再判斷abstractcs寄存器的cmderr的值是否為0,如果不為0則表示此次寫寄存器失敗,如果為0則表示寫寄存器成功。 4>read memory過程 如果progbufsize的值大于等于2,則會優先使用通過執行指令的方式來讀取內存。這里不分析這種方式,而是分析使用system bus的方式。通過前面的分析可知,system bus有兩個版本V0和V1,這里以V1版本來說明。 先將sbcs寄存器的sbreadonaddr的值設為1,sbaccess的值設為2(32位),然后將要讀內存的地址寫入sbaddress0寄存器。接著讀sbdata0寄存器,最后讀sbcs寄存器,如果其中的sbbusy、sberror和sbbusyerror都為0,則從sbdata0讀取到的內容就是要讀的內存的值。 5>write memory過程 和read memory類似,同樣以V1版本來說明。 先將要寫的內存地址寫到sbaddress0寄存器,然后將要寫的數據寫到data0寄存器,最后讀sbcs寄存器,如果其中的sbbusy、sberror和sbbusyerror都為0,則此次寫內存成功。 四、RISC-V JTAG的實現 通過在STM32F103C8T6上實現(模擬)RISC-V調試標準,進一步加深對RISC-V JTAG調試的理解。 使用STM32的四個GPIO作為JTAG信號的四根線,其中TCK所在的引腳設為外部中斷,即上升沿和下降沿觸發方式,實現了可以通過openocd以RISC-V的調試標準來訪問STM32的寄存器和內存。程序流程如圖19所示。 圖19 JTAG實現的程序流程 五、參考資料 1、在STM32上模擬RISC-V JTAG的實現:stm32_riscv_jtag_slave 2、一個從零開始寫的易懂的RISC-V處理器核:tinyriscv
    發表于 11-28 22:00

    基于深控技術 “不需要點表的邊緣計算網關” 的聯網解決方案

    深控技術研發的 “不需要點表的邊緣計算網關” 聯網解決方案憑借其無需點表配置、強大的邊緣計算能力、高度安全可靠以及廣泛的設備兼容性等優勢,能夠在多個行業的
    的頭像 發表于 11-15 11:51 ?603次閱讀
    基于深控技術 “不需<b class='flag-5'>要點</b>表的邊緣計算網關” 的<b class='flag-5'>物</b><b class='flag-5'>聯網</b>解決方案

    全面講解聯網應用的設計技巧和方法

    本文要點了解不同的聯網領域和應用了解聯網設計的基本組成部分
    的頭像 發表于 11-02 08:04 ?1465次閱讀
    全面講解<b class='flag-5'>物</b><b class='flag-5'>聯網</b>應用的設計技巧和方法

    “不需要點表的工業網關” 深控技術聯網解決方案

    “不需要點表的工業網關” 聯網解決方案
    的頭像 發表于 09-29 15:43 ?705次閱讀
    “不需<b class='flag-5'>要點</b>表的工業網關” 深控技術<b class='flag-5'>物</b><b class='flag-5'>聯網</b>解決方案

    什么是聯網技術?

    什么是聯網技術? 聯網技術(Internet of Things, IoT)是一種通過信息傳感設備,按約定的協議,將任何物體與網絡相連接,實現智能化識別、定位、跟蹤、監管等功能的
    發表于 08-19 14:08

    深入淺出系列之代碼可讀性

    原創聲明:該文章是個人在項目中親歷后的經驗總結和分享,如有搬運需求請注明出處。 這是“深入淺出系列”文章的第一篇,主要記錄和分享程序設計的一些思想和方法論,如果讀者覺得所有受用,還請“一鍵三連
    的頭像 發表于 08-09 16:00 ?532次閱讀
    主站蜘蛛池模板: 久久精品人人爽人人爽快 | 在线aa| 亚洲视频在线一区 | 444kk免费| 免费观看欧美一级片 | 黄色大片日本 | 免费看一级片 | 黄色在线播放网站 | 四虎一区二区三区精品 | 男女交性视频免费播放 | 中国色老头 | 亚洲国产成人久久77 | 一区免费视频 | 四虎影院免费网址 | 亚洲天堂手机在线 | 天天色天天干天天射 | 久久久久国产一级毛片高清片 | www.四虎在线| 人人澡人人澡碰人人看软件 | 国产精品美女在线 | 老汉影视永久免费视频 | 亚洲午夜视频 | 日韩在线毛片 | 一级特黄a 大片免费 | 爱情社保片鲁丝片一区 | 国产在线视频h | 最近国语剧情视频在线观看 | 99热久久久久久久免费观看 | 青草青视频在线观看 | 毛片网此| 91福利视频网| 四虎永久免费网站 | 亚洲精品卡1卡二卡3卡四卡 | 国模吧一区二区三区精品视频 | bbbb毛片免费看 | 国产专区青青草原亚洲 | 午夜看片影院在线观看 | 欧美男人的天堂 | 国产精品伦视频观看免费 | 色香蕉视频 | 好紧好爽太大了h视频 |