整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          論文閱讀 - CVPR 2016 - 語義分割論文-

          論文閱讀 - CVPR 2016 - 語義分割論文: ENet

          文源址:https://arxiv.org/abs/1606.02147

          tensorflow github: https://github.com/kwotsin/TensorFlow-ENet

          摘要

          在移動端上進行實時的像素級分割十分重要?;诜指畹纳疃壬窠浘W絡中存在大量的浮點運算而且需要經過較長的時間才可以進行投入使用。該文提出的ENet目的是減少潛在的計算。ENet相比現存的分割網絡,速度快18倍,參數量要少79倍,同時分割得到的準確率不有所損失,甚至有所提高。

          介紹

          目前,增強現實可穿戴設備,家庭智能設備,自動駕駛的興起,迫切需要將語義分割(場景理解)算法移植到較低性能的移動端設備上。分割算法對圖像中的每一個像素點進行類別標記。進來,較大的數據集與較強的計算資源(GPU,TPU)的出現促進了卷積神經網絡超越傳統的計算機視覺算法。盡管卷積網絡在分類和識別任務取得較好的效果,但進行像素級分割時,仍生成較為粗糙的空間結果。因此,經常會在此算法基礎上拼接其他算法來對結果進行增強,像基于顏色的分割,條件隨機場等。

          為了對圖片進行空間分類和進行精細的分割,已經出現了像SegNet,FCN等網絡結構,這些結構都是基于VGG-16的大型多分類網絡。但其有大量的參數和長時間的推理時間。因此,這些網絡并不適用于要求處理圖片速度高于10fps的移動端或者電池供電的應用設備上。

          該文所提出的網絡結構主要應用于快速的推理與進行較高準確率的分割。

          相關工作

          語義分割對于圖片理解與尋找目標發揮著重要的作用。在增強現實與自動駕駛中,語義分割發揮著舉足輕重的作用,此外,實時性的要求也是極高的。當下的計算機視覺應用普遍使用深度神經網絡。場景分析較好的卷積網絡使用兩階段網絡結構:編碼層和解碼層。受自編碼器的啟發。編碼-解碼結構的網絡在SegNet中出現并得到了改進。編碼部分類似于VGG的卷積網絡用于對輸入進行分類,而解碼部分主要用于對編碼網絡部分的輸出進行上采樣。但這些網絡的一個重大缺點是數量巨大的參數延長了其推理時間。不同于FCN,在SegNet中,VGG16的全連接層被移除,為了減少其浮點操作和內存的占用。但SegNet這種輕量級的網絡仍無法做到實時分割。

          其他結構基于較簡單的分類器后接CRF作為一個后處理的步驟。這些復雜的后處理操作經常無法標記一幀圖片中較小的物體。CNN可以結合RNN來提高準確率,但無法解決速度消失的問題。但RNN可以作為一種后處理手段與任何其他技術進行結合。

          網絡結構

          ENet網絡結構如下表格,該文參考ResNet,將其結構描述為一個主分支與一個帶有卷積核的附加分支,最后進行像素級的相加融合。

          ENet中的每個block如下圖b所示,每個block包含有三個卷積層:一個1x1的映射用于減少維度,一個主卷積層,一個1x1的擴張。將BN層與PReLU層穿插其中,將此結構組合定義為bottleneck 模型。如果bottleneck為下采樣,則在主分支上添加一個最大池化層,同時,bollteneck中第一個1x1的映射被一個大小為2x2,stride為2的卷積進行替換,對激活值進行padding操作,使其與feature map的尺寸相匹配。卷積大小為3x3的,類型有普通卷積,空洞卷積,及轉置卷積等,有時,用1x5或者5x1的非對稱卷積對其替換。對于正則化處理,在bottleneck2.0之前使用p=0.01,其他條件下使p=0.1。

          ENet的初始部分包含單獨的一個block。如上圖a.第一階段包含5個bottleneck部分。第二,三階段結構相同,但第三階段的開始處并未有下采樣的過程。前三個階段屬于編碼階段。第四五階段屬于解碼階段。由于cuDNN使用分離的內核進行卷積與偏差項的計算,為了減少內核的調用與內存的占用,該網絡并未使用偏差項,結果發現,準確率也并未受很大的影響。在每個卷積層與pReLU層之間添加了一層BN層。在解碼網絡部分,最大池化層,被最大上采樣層代替,padding被無偏差項的空間卷積替換。ENet在最后一個上采樣過程中并未使用最大池化的索引,因為輸入圖片的通道為3,而輸出通道數為類別數,最終,用一個全卷積模型作為網絡的最后模型,占用部分解碼網絡的處理時間。

          設計選擇

          Feature map的尺寸:語義分割中對圖片進行下采樣操作有兩處缺點:

          (1)feature map分辨率的減少意味著空間位置信息的損失,如準確的邊界信息等。

          (2)進行全像素的語義分割要求網絡的輸出大小要與輸入的大小相同。這意味著對圖片進行了下采樣,就要進行形同程度的上采樣。增加了模型的大小與計算資源。對于第一個問題,FCN通過添加編碼層的feature map,SegNet通過保留編碼網絡中最大池化過程中最大值的索引,并借此在解碼網絡中生成稀疏的上采樣maps??紤]到內存需要,該文使用SegNet的方式。同時,過分的下采樣,十分不利于分割的準確率。

          下采樣的一個優點是:在下采樣過的圖片中進行卷積操作會有較大的感受野,從而可以獲得更多的上下文信息。上下文信息十分利于不同類別的區分。該文發現使用空洞卷積的效果會更好。

          Early downsampling: 要想實現較好的分割效果和實時的操作,要意識到處理較大的輸入圖片是十分消耗資源的。ENet的前兩個block極大的減少了輸入的尺寸,同時,只使用了一小部分feature map。由于可視化信息是高度空間冗余的,可以將其壓縮為一種更有效的表達形式。網絡的初始部分作用為特征提取及后續網絡對輸入的預處理。

          解碼尺寸大小:SegNet是一個極其對稱的網絡結構,ENet網絡結構是非對稱的,包含一個較大的編碼層和一個小的解碼網絡。原因是編碼層應該像原始分類網絡的結構相似。用于處理較小的數據,同時進行信息的處理與濾波,解碼網絡對編碼網絡的輸出進行上采樣用于對細節的微調。

          非線性操作:該文發現去掉網絡初始層中的大部分ReLU層會提升分割的效果,作者認為此網絡的深度不夠深。然后,該文將所有ReLU替換為PReLUs,針對每張feature map增加了一個額外的參數。

          信息保留的維度變化: 前半部分進行下采樣是有必要的,但劇烈的維度衰減不利于信息的流動。為解決這個問題,該文任務在池化層后接一個卷積層增加了維度,進而增加了計算資源。為此,該文將池化操作與卷積操作進行并行操作,然后進行拼接。同時,在原始的ResNet的結構中,進行下采樣時,第一個1x1的映射,在所有維度上進行的是步長為2的卷積,丟棄了75%左右的輸入信息。將卷積核增加至2x2利于信息的保留。

          分解卷積核: 一個二維的卷積可以被分解為兩個維度為1的卷積核。(nxn=> nx1,1xn),該文使用5x1,1x5的非對稱卷積,減弱了函數學習的過擬合同時增加了感受野。卷積核的分解帶來的另一個好處是可以減少大量的參數。加上非線性處理,使計算功能更加豐富。

          空洞卷積:該文將bottleneck中的卷積層替換為空洞卷積并進行串聯,增大了感受野,提高了分割的IOU。

          正則化:目前的分割數據集有限,因此網絡的訓練很容易達到過擬合。該文使用空間Dropout進行處理。

          結果

          Reference

          [1] Y. LeCun and Y. Bengio, “Convolutional networks for images, speech, and time series,” The handbook of brain theory and neural networks, pp. 255–258, 1998.

          [2] A. Krizhevsky, I. Sutskever, and G. E. Hinton, “Imagenet classi?cation with deep convolutional neural networks,” in Advances in Neural Information Processing Systems 25, 2012, pp. 1097–1105.

          [3] K. Simonyan and A. Zisserman, “Very deep convolutional networks for large-scale image recognition,” arXiv preprint arXiv:1409.1556, 2014.

          對于MFB的類別權重預處理得到的分割結果:

          作者:fourmi_gsj

          原文鏈接:http://www.deepsmart.ai/297.html

          微信交流聯系:DeepSmart_AI

          更多信息關注公眾號:DeepSmartAI

          于許多跨國公司來說,在中國開展業務意味著同時存在著巨大的機遇和挑戰。

          中國被稱為世界工廠,為滿足全球范圍內商品和服務的需求,中國將生產的各類產品供給全球供應鏈。作為人口超過十億的世界大國,中國毫無疑問是全球最大的消費市場之一。不論你是銷售商還是生產商,如果你的公司立志為全球領導者,在中國開展業務是極為重要的一環。

          在網絡方面,跨國公司需要將公司現有的廣域網延伸至中國,以支持本地業務的快速增長。如果你的公司屬于汽車、制造、物流等行業,那么提高公司與中國地區的網絡連接就非常重要,尤其對于使用Microsoft 365和Salesforce CRM等云服務、或是將中國境內的分支機構與客戶骨干網絡連接的公司。


          與世界互聯

          對于跨國公司而言,其面臨一個重大挑戰就是如何應對中國網絡安全法規。企業需要確保所有的網絡接入和傳輸都符合中國的法律法規。

          通常來說,大多數跨國公司在中國運營時會面臨三種網絡連接場景:

          a)利用VPN網絡連接站點和用戶

          例如,一家跨國公司在中國境內外都設有站點,并將其總部、分支機構與數據中心連接起來。大多數本地服務供應商可以提供基礎設施運營,但無法提供連接中國境內與境外的站點或數據中心的之間的跨境VPN連接。這類的公司正在為跨境廣域網(WAN)服務尋求具備集中管理、網絡靈活性和自動化的方案。

          b)分支機構網絡節省之道: SD-WAN方案

          企業希望降低昂貴的MPLS費用,并為非關鍵應用程序部署更經濟的SD-WAN方案??鐕疽话阍谥袊硟韧舛加械谌秸军c連接(通常是托管在外部云環境中的SaaS服務),但第三方連接無法提供連接中國境內外站點和境外數據中心的跨境VPN。

          c)在中國境內實現多云、混合IT平臺的安全連接

          盡管近年來中國的公共云使用量呈指數級增長,但對于將關鍵應用程序和數據進行托管的跨國公司來說,網絡安全仍然是一個主要問題。企業希望通過在多云環境中實現集中管理,使混合廣域網服務獲得更佳的網絡靈活性和自動操作能力。

          總體來說,中國國內的互聯網連接非常穩定,大多數中國網絡服務供應商都能夠提供穩定可靠的服務。但是按照現行的網絡安全法規,在使用互聯網和云服務時,與境外服務器連接的網絡接入速度將會受到一定影響。這可能會導致部分公司的日常運營中出現數據丟包和訪問延遲等情況。


          SD-WAN時代,如何保證國內外業務通暢

          為了解決這些問題,許多跨國公司通過SD-WAN方案,為中國之外的站點提供連接。通常情況下,使用軸輻式的網絡模型,通過MPLS連接的VPN,允許通過充當中間傳遞的SD-WAN設備訪問香港和內地站點的公司服務器。

          還有一些公司只部署了MPLS,特別是那些在中國有分支工廠的公司。盡管比混合MPLS和SD-WAN方案的成本高得多,但通過基于MPLS的安全VPN傳遞數據可以避免出現網絡覆蓋不全、數據包丟失的情況,并避免違規。另一種策略是部署兩條不同供應商的MPLS線路,以確??鐓^域的連接。在備用方案上,許多跨國公司的中國分支機構在香港使用動態多點VPN集線器,通過Internet將業務數據路由到香港、美國、歐洲或其他地方。

          2018年,中國監管部門頒布了新政策來規范VPN的使用,禁止非法連接,以保證互聯網接入服務合法合規。雖然SD-WAN的使用率在迅速上升,但新政策還是一定程度上影響了部分跨國公司通過Internet部署SD-WAN服務的計劃。

          值得稱贊的是,工信部竭盡全力確保新政策不會影響公司現有的VPN、SD-WAN和IP SEC服務。工信部強調,只要遵守中國相關的規章制度,就不會對企業的跨境業務造成干擾。很多跨國公司已尋求中國本地網絡服務供應商的協助,以確保在新政下互聯網接入100%合規,避免違規或造成誤解。


          保持合規:在中國安全經營

          對于在中國境內運營并需要與國外數據中心建立連接的跨國公司而言,為確保分支機構網絡合規。熟悉中國互聯網的專業人士推薦以下準則:

          • 所有本地Web服務器都需要由工信部和本地公安部門頒發的ICP許可證。電子商務網站也需要獲得相關的許可證。
          • 由于法規政策變化等原因,對于已經建立的IPSec VPN或SD-WAN網絡,公司應當考慮其運行合規性。不可靠的網絡連接會影響關鍵業務的開展。如果您的企業打算部署SD-WAN,與熟悉監管法規和市場狀況的本地SD-WAN提供商合作是最佳選擇??蓞⒖迹?https://www.cbccom.cn/cn/service/service_type_info/eNet-Connect.html
          • 在中國運營的跨國公司也可以考慮使用替代性連接解決方案,例如專線和MPLS。本地電信服務商可以直接或間接提供相關服務。
          • 將服務器放置在中國國內,以便向中國客戶提供更為便捷的訪問。在國內租用服務器可以減輕IT基礎架構的支出,同時可以訪問國外市場。
          • 盡管目前不是監管的重點,但公司應規范互聯網訪問機制。例如:為員工和訪客(通過Wi-Fi)提供不受限制的Internet訪問,可能會被監管機構視為互聯網服務提供商,需要對違規行為負責。

          總之,跨國公司想要進入中國市場并順利開展業務,必須了解中國的網絡安全法,并根據相關法律要求制定策略,以確保運營合法合規、業務100%正常運行。所以與了解中國市場的互聯網服務合作伙伴一起,攜手開拓市場,不失為最佳選擇。


          關于作者

          胡淑儀 天維信通CBC副總裁-產品、方案和市場


          關于CBC

          CBC成立于2008年,由寬帶資本等私募基金投資組建,是中國領先的托管網絡服務提供商,具備完整資質,可為客戶提供完整的下一代通信服務組合,幫助客戶的海內外業務建立連接。CBC 為客戶提供獨特的服務組合,包括:裸光纖、波道、專線、IP VPN、IDC以及最新的SD-WAN和云服務。

          CBC總部位于北京,在上海、蘇州、香港、新加坡設立了分公司,在廣州、深圳、天津、杭州、南京、武漢、成都、長沙設立了辦公室,業務覆蓋中國主要的商業區域。

          成立12年來,CBC為全球制造、金融、保險、物流、供應鏈、貿易等行業的全球500強和國內外企業提供優質服務。CBC已獲得TL9000、ISO9001、ISO20001、ISO27001等多項國際管理體系認證,在各業務領域為企業提供可靠、安全的服務。

          離和非隔離電源拓撲,看這篇文章就夠了!

          1)非隔離DC-DC拓撲介紹

          Buck型拓撲變換器

          Buck型變換器的拓撲結構如圖所示,Buck型變換器也稱降壓型電源拓撲。在開關管S導通時,二極管VD負極電壓高于正極反偏截止,此時電流經過電感L向電容和負載供電,同時電感L中儲存了能量。在開關管S關斷時,電感L中儲存的能量不能立即釋放,產生的感應電流通過負載、二極管VD形成續流通路,繼續給負載供電。該二極管也因此稱為續流二極管。在降壓型電源拓撲中,當驅動開關管的PWM占空比為D時,輸出與輸入滿足的關系為:

          Boost型拓撲變換器

          Boost變換器基本拓撲結構如圖所示。Boost變換器也稱為升壓型電源拓撲。當開關管S導通時,二極管正極電壓低于負極電壓反偏關斷,電源和電感形成通路,電感L流過電流儲存能量,此時負載由電容提供能量。當開關管S斷開時,此時二極管正向導通,電源和電感L儲存的能量同時向電容、負載供電。在升壓型變換器中,當驅動開關管的控制信號占空比為D時,輸出與輸入滿足關系為:

          Buck-Boost型拓撲變換器

          Buck-Boost變換器基本拓撲結構如圖所示,Buck-Boost變換器也稱為升降壓型開關電源拓撲,。在開關管S導通時,二極管負極電壓高于正極電壓反偏截止,電源和電感形成通路,電感L儲存能量。當開關管S關斷時,二極管正向導通,電感電流不會立即釋放與負載、二極管形成續流通路。但是,此時負載電壓與輸入電壓極性相反。在Buck-Boost變換器中,當驅動開關管的控制信號的占空比為D時,輸出與輸入滿足的關系為:

          2)隔離式DC-DC拓撲介紹

          正激式拓撲變換器

          正激式變換器基本拓撲結構如圖所示。將變壓器放在降壓型變換器的開關管和二極管之間就可以得到正激式的拓撲結構,變壓器的原邊和副邊的隔離就使輸入和輸出隔離。正激時變換器因電路設計簡單、經濟便捷,在50W~400W的場合應用很廣。但是由于變壓器上所有線圈電流在開關管關斷的時候,全部斷開,為了保證變壓器的磁芯不發生磁飽和現象,附加繞組W3的加入起到磁芯復位的功能。

          當開關管S導通時,電源電壓加到初級繞組W1上,根據N1、N2同名端的關系,此時初級繞組能量傳遞到次級繞組W2,VD1導通,電感L,電容C共同獲得初級輸入的能量。當開關管S關斷時,W1中剩余能量通過輔助繞組W3返回到電源的輸入,VD1截止,次級的電感L、 二極管VD2、負載形成續流通路。

          在正激式變換器中特別注意開關S關斷到下個周期開關S導通的時間內要使磁芯剩余的能量得到釋放,否則在后續的時間內,該剩余的能量值不斷的增加,最后達到磁芯所能承受的極限值而飽和。

          反激式拓撲變換器

          反激式變換器基本拓撲結構如圖所示。在Buck-Boost型變換器中將高頻變壓器放在電感的位置就有了反激式的電路。反激式變換器設計非常容易,價格低廉,常常用在多路輸出的小功率開關電源場合。

          當開關管S導通時,電源電壓加在初級繞組W1兩端,根據N1、N2同名端的關系,繞組W2的高電位在下端,二極管VD1此時不導通。當開關S關斷時, 繞組W2的高電位在上端,二極管VD1正向導通,負載獲得能量。

          推挽式拓撲變換器

          推挽式變換器其拓撲結構如圖所示。原邊開關管S1、S2交替導通,變壓器磁芯中的能量能夠正常的儲存和釋放,從而將能量從原邊向副邊傳遞。

          當開關S1導通,S2關斷時,副邊繞組二極管VD1導通,負載獲得能量。當S2導通,S1關斷時,副邊二級管VD2導通,負載仍能獲得能量。當開關管S1,S2都關斷時,電感L通過二極管VD1、VD2和負載形成通路,根據并聯分流,負載電流只有一半通過每個二極管,但此時開關管承受的電壓均為。,所以為了保證開關管的電壓應力不會過大,推挽式變換器用在低壓大電流的場合具有一定的優勢。

          半橋拓撲變換器

          半橋變換器其拓撲結構如圖所示。一條橋臂由兩個電容組成,另一條橋臂由兩個功率開關管組成。在電路正常工作時,原邊繞組在控制信號整個周期均有電流,磁芯的利用率得到提高。所以半橋變換器用在高電壓、大功率的情況下比較有優勢。

          電容C1和C2容值、型號一致,則每個電容上的電壓為。當開關S1導通S2關斷時,二極管VD1導通,VD2截止,此時N21繞組向負載傳遞能量。當開關S1關斷,S2導通時,二極管VD2導通,VD截止,此時N22繞組能向負載傳遞能量,即副邊繞組N21和N22交替釋放能量。

          全橋拓撲變換器

          全橋變換器其拓撲結構如圖所示。四個開關管組成H橋電路,變壓器原變繞組接在橋式電路的負載位置。當開關S1和S4導通,S2和S3關斷時,初級繞組的高電位在上端。當開關S2和S3導通,S1和S4關斷時,初級繞組的高電位在下端。因此,在一個周期內初繞組流過的電流方向相反,變壓器不存在磁芯飽和問題,這也使得全橋變換器的效率和功率密度可以做的很高。全橋變換器的次級繞組帶有一個中心抽頭,輸出采用全波整流的方式,因此適合應用在大功率的條件下。

          各類型拓撲比較如下表所示:

          隔離式DC-DC拓撲電路的比較

          查看原文:https://www.dianyuan.com/eestar/article-8316.html


          MCUXpresso IDE下添加新路徑下源文件進工程編譯的方法

          大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是MCUXpresso IDE下添加新路徑下源文件進工程編譯的方法

          接著上篇文章 《MCUXpresso IDE下SDK工程導入與workspace管理機制》 接著聊,痞子衡說過不建議從零開始創建新工程項目,最好就是導入一個SDK里的現成項目(盡量跟你最終需求相近,主要是需要的SDK基礎驅動都要包含),然后在這個項目基礎上修改成自己想要的最終工程。

          如果你是一個習慣于IAR或者MDK這種非Eclipse式集成開發環境的用戶,你可能會對MCUXpresso IDE下管理工程(主要是在工程里增加源文件)的方式感到不適應。本文痞子衡將為你指明MCUXpresso IDE下增加源文件讓你不適應的地方。

          一、準備測試環境

          上篇文章 《MCUXpresso IDE下SDK工程導入與workspace管理機制》 里我們導入了RT500的一個hello world項目進workspace空間,讓我們將這個項目拷貝到如下自定義的路徑,然后在MCUXpresso IDE下使用 Import project(s) from file system 方式并且不勾選 Copy projects into workspace 選項去打開自定義路徑下的hello world工程。

          為簡單起見,我們再創建三組源文件:sw_delay1.c/h、sw_delay2.c/.h、sw_delay3.c/.h,我們會用這三組源文件來測試三種不同路徑類型下添加源文件進工程的情況。

          ////////////////sw_delayx.c////////////////
          #include "sw_delayx.h"
          void sw_delayx(uint32_t n)
          {
              while (n !=0U)
              {
                  n--;
              }
          }
          
          ////////////////sw_delayx.h////////////////
          #include <stdint.h>
          #if defined(__cplusplus)
          extern "C" {
          #endif
          void sw_delayx(uint32_t n);
          #if defined(__cplusplus)
          }
          #endif

          二、已有路徑下添加源文件進工程

          第一種測試情況最簡單,我們直接把sw_delay1.c/h文件放到\mcux_test\evkmimxrt595_hello_world\source\路徑下,跟主函數源文件hello_world.c放在一起。當我們將新源文件放到已有路徑下時,在MCUXpresso IDE工程里新文件就立刻顯示在了界面左上角的workspace里(可以理解為直接被添加進工程了),根本不用你手動添加(這是跟IAR/MDK相比第一個不同的地方,也是你可能不適應的地方),這時候我們可以在主函數文件里直接引用和調用sw_delay1.c/h里的內容,不需要再額外做任何工程設置。

          自動刷新工程路徑下源文件進工程是Eclipse型IDE的特色,這個特色其實挺好,只有一種情況下不太方便,那就是多個不同源文件中均有相同函數定義(可能是測試目的,或者刻意保留不同版本函數實現),這種情況下在工程編譯時會報錯,需要在IDE里主動右擊你不想添加進工程的源文件,在Properties框里勾選上 Exclude resource from build

          三、新路徑下添加源文件進工程

          3.1 在工程文件所在路徑下

          現在我們換一種情況,還是在當前工程路徑\mcux_test\evkmimxrt595_hello_world下,但是新建一個名為sw_delay2的文件夾,并且將sw_delay2.c/h文件放到\mcux_test\evkmimxrt595_hello_world\sw_delay2\路徑下。因為有了新路徑,此時還需要在工程Properties選項的MCU C Compiler / Includes里(最好在MCU Assembler / General 里也同樣設置)將該新路徑添加進去。

          此時新文件夾sw_delay2及其中源文件好像同樣被自動更新到了工程workspace中,我們試試在主函數源文件中調用sw_delay2(),并編譯工程。很遺憾,工程編譯報錯,提示undefined reference to `sw_delay2',就是找不到sw_delay2()函數,這是為什么?

          這里要介紹第二個讓你不適應的地方,那就是工程文件所在路徑下的新建文件夾看起來被自動更新顯示到工程workspace中了,但其實其中源文件并沒有真正被添加進工程,還需要你手動做一次路徑添加,在工程Properties選項的C/C++ General的Paths and Symbols下做如下操作。做完之后,你可以在workspace里看到此時sw_delay2文件夾被提到了Debug上面顯示(在SDK工程里,Debug和doc文件夾一般顯示在最下面,這兩個并沒有被真正添加進工程源文件路徑,凡是顯示在它們后面的文件夾都是沒有被真正加入工程的),現在工程可以正常編譯了。

          3.2 非工程文件所在路徑下

          最后介紹一種最復雜的情況,這次不在工程路徑\mcux_test\evkmimxrt595_hello_world下做文章,我們在\mcux_test\路徑下新建一個名為sw_delay3的文件夾,并且將sw_delay3.c/h文件放到\mcux_test\sw_delay3\路徑下。因為這個新路徑跟工程路徑不相關,因此工程workspace沒有自動顯示它,此時當然需要我們手動來添加這個文件夾進工程。右擊工程選擇 New / Folder,使用Folder選項里Advanced下面的 Link to alternate location 功能將sw_delay3文件夾及其源文件添加進工程。

          此時工程workspace中已經顯示了sw_delay3文件夾,但是顯示在最下面(Debug和doc之后),這時候我們可以當sw_delay3文件夾剛剛被放到\mcux_test\evkmimxrt595_hello_world\下面一樣,按3.1節里的方法走一遍,MCU C Compiler / Includes和C/C++ General - Paths and Symbols下都分別再設置一下。

          這里有第三個讓你不適應的地方,非工程文件所在路徑下的源文件夾在被強制鏈到工程里時,其Include路徑直接轉變成了當前工程路徑/${ProjName}/下,并不需要像IAR/MDK那樣使用 ../ 去回退尋找具體的相對路徑。

          至此,MCUXpresso IDE下添加新路徑下源文件進工程編譯的方法痞子衡便介紹完畢了,掌聲在哪里~~~

          查看原文:https://www.dianyuan.com/eestar/article-8340.html


          OTFAD加密啟動失???先去檢查系統時鐘配置

          大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是系統時鐘配置不當會導致i.MXRT1xxx系列下OTFAD加密啟動失敗問題。

          我們知道,i.MXRT1xxx家族早期型號(RT1050/RT0160/RT1020)的硬件解密外設名字叫BEE,這個外設主要是配合FlexSPI外設去實現外接串行NOR Flash在線解密XIP執行用的。而到了最近的i.MXRT1xxx新型號(RT1010/RT1170)上,BEE外設被替換成了OTFAD外設,功能不變,解密效率得到了很大提升,但客戶在使能OTFAD加密啟動時常常遇到App無法正常運行問題,這其實跟OTFAD自身的一個時鐘小限制有關(這個限制在BEE上不存在),今天痞子衡就來好好聊一聊OTFAD的這個小限制:

          一、問題描述

          我們以i.MXRT1010為例,從恩智浦官網下載一個SDK包(痞子衡下的是v2.9.1),隨便選擇其中一個例程,就以最簡單的 \SDK\boards\evkmimxrt1010\demo_apps\led_blinky 為例吧。編譯這個 led_blinky 工程(選擇 flexspi_nor_debug build,即XIP工程),得到可執行文件(實際bin文件大小為10KB左右),使用 NXP-MCUBootUtility 工具將可執行文件(led_blinky.out)下載進MIMXRT1010-EVK開發板中(下載時啟動模式為2'b01,啟動時切換到2'b10),可以看到板載綠色LED小燈(D25)會閃,例程是可以正常工作的。

          現在讓我們嘗試使能OTFAD加密,回到芯片下載模式依然借助 NXP-MCUBootUtility 工具,將工具 Secure boot type 選項切換為 OTFAD Encrypted Image Boot,其他設置均默認(此時加密范圍是 0x60001000 - 0x60001fff,僅加密IVT等啟動頭,不含app),再次下載可執行文件(led_blinky.out),換到芯片啟動模式復位板子,例程依舊是正常工作的,看起來OTFAD加密啟動似乎沒有問題。

          讓我們再進一步,將加密范圍設置為0x60002000 - 0x60004fff,這時加密區域覆蓋到了整個app,重新按上述流程操作一遍,發現例程沒能正常工作,這時候OTFAD加密啟動出了問題,難道app區域不能被加密?那OTFAD加密還有啥意義?

          app區域當然可以被加密,跟著痞子衡再做一次實驗,在 led_blinky.c 文件的 main() 函數中,我們將時鐘配置函數 BOARD_BootClockRUN() 直接注釋掉或者在鏈接文件里將其全部搞成 __ramfunc(即在芯片內部RAM里執行這部分時鐘配置代碼),這個例程僅是利用SysTick定時翻轉GPIO,因此時鐘配置代碼去掉不影響正常運行,重新編譯工程再按上面流程操作一遍,這時候例程又能正常工作了,說明加密后的app是能被OTFAD正常解密執行的。

          現在的問題變成了為何OTFAD加密啟動時,BOARD_BootClockRUN() 函數不能在Flash里執行,這就是問題所在。

          二、原因分析

          關于上述問題的原因,痞子衡先直接給答案,這是OTFAD外設本身的時鐘小限制,當OTFAD被使能時,如果被加密的app代碼是XIP執行,app里做系統時鐘配置時要始終保證Core時鐘高于FlexSPI外設時鐘。如果Core時鐘低于FlexSPI時鐘,此時Core去訪問加密Flash區域,OTFAD無法正常解密,會導致指令錯亂,發生系統故障。

          我們配合上面的i.MXRT1010系統時鐘樹來認真分析下OTFAD這個時鐘限制問題。芯片上電總是從BootROM執行,BootROM會先將Core配置到396MHz,將FlexSPI時鐘根據用戶放置在Flash偏移0x400處的FDCB里的設定配到30MHz - 200MHz不等,再讀取Flash偏移0地址處OTFAD DEK KeyBlob數據使能OTFAD,然后讀取IVT等頭信息去跳轉到App。很顯然只加密IVT部分根本不受OTFAD限制的影響,這部分解析是在BootROM里完成的,BootROM里時鐘配置符合OTFAD時鐘限制要求。

          // BootROM里對Core時鐘配置
          CCM_ANALOG->PFD_528[PFD3_FRAC]=24,   PLL2 PFD3輸出 (528MHz * 18) / 24=396MHz
          CCM->CBCMR[PRE_PERIPH_CLK_SEL]=2,    時鐘來自PLL2 PFD3
          CCM->CBCDR[PERIPH_CLK_SEL]=0,   內核時鐘來自CCM->CBCMR[PRE_PERIPH_CLK_SEL]
          CCM->CBCDR[AHB_PODF] =0,   內核時鐘不分頻
          
          // BootROM里對FlexSPI時鐘配置
          CCM_ANALOG->PFD_480[PFD0_FRAC]=x,    PLL3 PFD0輸出 (480MHz * 18) / x
          CCM->CSCMR1[FLEXSPI_CLK_SEL]=3,    時鐘來自PLL3 PFD0
          CCM->CSCMR1[FLEXSPI_CLK_SRC]=0,   FlexSPI時鐘來自CCM->CSCMR1[FLEXSPI_CLK_SEL]
          CCM->CSCMR1[FLEXSPI_PODF]=y,   FlexSPI時鐘做(y+1)分頻

          當BootROM跳轉到了App之后,我們再來看看App里對時鐘是怎么配置的,就是BOARD_BootClockRUN()函數,可以看到這個函數里將內核頻率從BootROM設置的396MHz切換到外部OSC 24MHz。無論此時用戶FDCB里對FlexSPI時鐘是多少配置,至少也會大于30MHz,那么此時24MHz內核頻率一定會低于FlexSPI時鐘頻率,此時只要發生內核對Flash加密區域的訪問(時鐘配置代碼就在Flash里執行),就觸發了OTFAD時鐘限制問題,App就會跑飛。

          三、解決方案

          知道了原因,解決方案就簡單了,在App時鐘配置里,不要按照尋常套路去先將內核時鐘源切換到外部OSC再切到PLL,而是直接切到PLL上。比如i.MXRT1010內部有個PLL6(也叫Audio PLL),固定500MHz,正好是App要的最終內核頻率,我們在BOARD_BootClockRUN()里將Audio(Enet) PLL初始化設置代碼提到前面,刪掉原來的切換OSC設置代碼即可。

          void BOARD_BootClockRUN(void)
          {
              // 此處略去...
              /* Set Oscillator ready counter value. */
              CCM->CCR=(CCM->CCR & (~CCM_CCR_OSCNT_MASK)) | CCM_CCR_OSCNT(127);
          -    /* Setting PeriphClk2Mux and PeriphMux to provide stable clock before PLLs are initialed */
          -    CLOCK_SetMux(kCLOCK_PeriphClk2Mux, 1); /* Set PERIPH_CLK2 MUX to OSC */
          -    CLOCK_SetMux(kCLOCK_PeriphMux, 1);     /* Set PERIPH_CLK MUX to PERIPH_CLK2 */
          
              // 此處略去...
              /* Set IPG_PODF. */
              CLOCK_SetDiv(kCLOCK_IpgDiv, 3);
          +     /* Init Enet PLL. */
          +    CLOCK_InitEnetPll(&enetPllConfig_BOARD_BootClockRUN);
          +    /* Set preperiph clock source. */
          +    CLOCK_SetMux(kCLOCK_PrePeriphMux, 3);
          
              // 此處略去...
              /* Enable Audio PLL output. */
              CCM_ANALOG->PLL_AUDIO |=CCM_ANALOG_PLL_AUDIO_ENABLE_MASK;
          -    /* Init Enet PLL. */
          -    CLOCK_InitEnetPll(&enetPllConfig_BOARD_BootClockRUN);
          -    /* Set preperiph clock source. */
          -    CLOCK_SetMux(kCLOCK_PrePeriphMux, 3);
          
              // 此處略去...
              /* Set SystemCoreClock variable. */
              SystemCoreClock=BOARD_BOOTCLOCKRUN_CORE_CLOCK;
          }

          最后再提一下,這個OTFAD時鐘限制問題在i.MXRT1170上同樣存在,解決思路與上面類似,痞子衡就不再贅述了。

          至此,系統時鐘配置不當會導致i.MXRT1xxx系列下OTFAD加密啟動失敗問題痞子衡便介紹完畢了,掌聲在哪里~~~

          查看原文:https://www.dianyuan.com/eestar/article-8335.html


          反激拓撲3—CCM模式與DCM模式的邊界條件

          上期推送對反激電路的工作模式和簡單原理計算進行了介紹反激拓撲2—反激電路工作原理分析,文中提到反激電路工作模式分為CCM、CRM和DCM,那么CCM和DCM模式的邊界條件是什么?很明顯,就是上文中說的CRM即臨界模式,我們在同一個圖中繪制出三個模式下的勵磁電流波形進行分析。

          從圖中,可知:

          ①CCM模式下,勵磁電流的平均電流存在一個直流分量,其平均電流Im>Im_peak/2,t1+t2+t3=T,t1=ton,t2+t3=toff;

          ②DCM模式下,勵磁電感在每個周期內都可以被完全去磁,其平均電流Im<Im_peak/2,t1+t2+t3=T,t1=ton,t2=toff,t3時間段內,反激變壓器的原副邊均無電流;

          ③CRM邊界模式下,勵磁電感充磁和去磁能量正好相等,其平均電流Im=Im_peak/2,t1+t2+t3=T,t1=ton,t2+t3=toff;

          反激變壓器初級側的電流波形如圖所示

          變壓器次級電流波形如圖所示


          根據電感伏秒平衡定律:

          帶入上式簡化得:

          這個就是CCM和DCM的邊界條件,其中f為反激電源的開關頻率,D為占空比,N為原副邊的匝數比,Lm為勵磁電感,R為等效負載電阻。有如下結論:CCM模式下:

          DCM模式下:

          查看原文:https://www.dianyuan.com/eestar/article-8437.html


          更多精彩內容,盡在電子星球 APP(https://www.eestar.com/)

          六篇技術文章,讓你秒懂電容的脾氣秉性

          七篇DIY技術文章獻給你,讓你腦洞全開

          五篇文章幫你開啟DSP的學習思路

          匯總篇:關于PID知識,重點在此


          主站蜘蛛池模板: 一区二区三区四区免费视频| 动漫精品第一区二区三区| 美女免费视频一区二区| 久久99国产精一区二区三区| 国产一区二区三区在线电影| 国产主播一区二区| 好看的电影网站亚洲一区| 无码视频一区二区三区| 色欲精品国产一区二区三区AV| 国产成人精品无码一区二区老年人| 亚洲色大成网站www永久一区| 无码少妇一区二区三区芒果| 国产内射在线激情一区| 亚洲综合一区国产精品| 亚洲一区精品无码| 中文字幕精品一区二区三区视频| 天堂一区二区三区精品| 久久久久人妻一区二区三区| 国产在线精品一区免费香蕉| 精品少妇ay一区二区三区| 无码人妻一区二区三区在线| 国偷自产Av一区二区三区吞精| 内射女校花一区二区三区| 国产精品一区二区三区高清在线| 成人免费观看一区二区| 亚洲欧美日韩一区二区三区在线 | 少妇激情av一区二区| 日韩精品一区二三区中文| 亚洲综合无码一区二区| 亚洲福利一区二区精品秒拍| 91精品福利一区二区三区野战| 奇米精品一区二区三区在线观看| 国产成人精品视频一区二区不卡| 射精专区一区二区朝鲜 | 一区二区三区无码被窝影院| 亚洲熟女少妇一区二区| 蜜臀AV在线播放一区二区三区| 最新欧美精品一区二区三区| 波多野结衣在线观看一区| 亚洲AV无码一区二区三区在线| 人妻无码久久一区二区三区免费|