色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃

x
x

BLDC 控制中的一個(gè)奇怪的軟件問(wèn)題:注意那些“只寫(xiě)”寄存器

發(fā)布時(shí)間:2022-4-28 11:31    發(fā)布者:eechina
關(guān)鍵詞: BLDC , 寄存器
來(lái)源:Digi-Key
作者:Jacob Beningo

這是最奇怪的問(wèn)題之一。該系統(tǒng)似乎在按預(yù)期工作,但遙測(cè)數(shù)據(jù)表明情況并非如此。決定電機(jī)轉(zhuǎn)速的“按需輸入”報(bào)告為 85%,但幸運(yùn)的是,電機(jī)并沒(méi)有轉(zhuǎn)起來(lái)。我很想揮揮手說(shuō)這沒(méi)什么大不了的,或者說(shuō)這是遙測(cè)分析軟件的問(wèn)題,但有些地方不太對(duì)勁,F(xiàn)在應(yīng)該好好研究一下了,進(jìn)行全系統(tǒng)檢查,找到問(wèn)題原因。

這個(gè)特殊的系統(tǒng)使用的是 Allegro Microsystems A4964 無(wú)刷直流 (BLDC) 電機(jī)驅(qū)動(dòng)芯片。我越來(lái)越喜歡這個(gè)芯片,因?yàn)樗且环N靈活的電機(jī)驅(qū)動(dòng)解決方案,而且把所有可能占用 CPU 周期的控制代碼從微控制器 (MCU) 移走,由專門(mén)的硬件芯片執(zhí)行(圖 1)。


圖 1:A4964 很有用,因?yàn)樗鼘o(wú)刷直流電機(jī)的控制功能從 MCU 遷移至專用硬件。(圖片來(lái)源:Allegro Microsystems)

在這個(gè)系統(tǒng)配置中,我利用 SPI 通信接口來(lái)設(shè)置 32 個(gè)片上寄存器,這些寄存器將決定 BLDC 電機(jī)的驅(qū)動(dòng)和控制方式。

對(duì)于該應(yīng)用,A4964 在安裝過(guò)程中由初始化程序讀取包含所需電機(jī)配置參數(shù)的配置表完成其配置。偽碼(此處僅用于舉例)如下所示(列表 1)。

副本
for(uint8_t WriteIndex = 0; WriteIndex < A4964MaxRegister; WriteIndex++)
{
    // Write value stored in A4964Config at index WriteIndex to the chip
}
列表 1:所示為讀取電機(jī)配置參數(shù)的初始化程序。(代碼來(lái)源:Jacob Beningo)

從初始化角度來(lái)看,這段代碼沒(méi)有什么問(wèn)題,所以我很快決定檢查該應(yīng)用中經(jīng)常被調(diào)用的主要邏輯。這段代碼有點(diǎn)兒意思。該應(yīng)用所處的環(huán)境中存在大量輻射,這可能會(huì)影響 RAM 中存儲(chǔ)的值。初始化值在啟動(dòng)時(shí)被寫(xiě)入 A4964 的 RAM 中,所以為了迅速克服可能發(fā)生的“位翻轉(zhuǎn)”,A4964 的內(nèi)存被定期讀取:如果出現(xiàn)不匹配,則會(huì)更新設(shè)置。偽代碼如下(列表 2):

副本
for(uint8_t Index = 0; Index < A4964MaxRegister; Index++)
{
    // Read the A4964 configuration register at location Index

   // If read value does not match expected value, write configuration value
}
列表 2:本地輻射可能會(huì)影響存儲(chǔ)在 RAM 中的值,因此為了應(yīng)對(duì)“位翻轉(zhuǎn)”,A4964 的內(nèi)存會(huì)被定期讀取,如果出現(xiàn)不匹配,則更新設(shè)置。(代碼來(lái)源:Jacob Beningo)

又出現(xiàn)類似情況,代碼非常簡(jiǎn)單,不可能出錯(cuò),但芯片中莫名其妙地被寫(xiě)入了不正確的需求輸入值。這個(gè)值似乎是短暫存在的,在報(bào)告正確值之前,該值在一些遙測(cè)值中出現(xiàn),然后又一次提供了錯(cuò)誤的值。真令人費(fèi)解!

更為有趣的是,沒(méi)有任何配置值或應(yīng)用值可以將 85% 的值寫(xiě)入寄存器!那么,這個(gè) 85% 的值到底是從哪里來(lái)的呢?十進(jìn)制 85 轉(zhuǎn)換成十六進(jìn)制時(shí)為 0x55。在代碼庫(kù)中有出現(xiàn) 0x55 的地方嗎?當(dāng)然有。0x55 被用作 SPI 總線上讀操作的虛設(shè)寫(xiě)字符!但是,讀操作是如何被轉(zhuǎn)換為寫(xiě)操作的呢?

事實(shí)證明,只要我們仔細(xì)觀察 A4964 的規(guī)格書(shū)(圖 2),答案就非常明顯。


圖 2:數(shù)據(jù)手冊(cè)中的一個(gè)片段顯示了這個(gè)問(wèn)題。寄存器 30 的特點(diǎn)是只寫(xiě)!(圖片來(lái)源:Allegro Microsystems)

寄存器 30 管理電機(jī)的“按需輸入 (DI)”,是只寫(xiě)寄存器!嘗試從該寄存器中讀出數(shù)據(jù),會(huì)導(dǎo)致向該寄存器中寫(xiě)入虛字節(jié)!簡(jiǎn)單的初始化和芯片刷新功能嘗試從“按需駛?cè)搿奔拇嫫髦凶x取以驗(yàn)證設(shè)置,并在無(wú)意中寫(xiě)入了一個(gè)新的“按需輸入”值。系統(tǒng)繼續(xù)按預(yù)期工作,因?yàn)閷?duì)寫(xiě)寄存器的讀取操作總是導(dǎo)致隨后會(huì)寫(xiě)入正確的值,但并不總是足夠快,所以錯(cuò)誤值沒(méi)有出現(xiàn)在系統(tǒng)遙測(cè)值中。

對(duì)于 A4964,軟件開(kāi)發(fā)者不應(yīng)在整個(gè)內(nèi)存圖中寫(xiě)入配置數(shù)據(jù),而是需要在寫(xiě)入寄存器 29 之后停止。最后兩個(gè)可尋址的寄存器是特殊的寫(xiě)和只讀寄存器。

有時(shí),不管我們?yōu)檎_編寫(xiě)驅(qū)動(dòng)程序或?qū)嵤┸浖冻隽硕嗌倥Γ倳?huì)有一些奇奇怪怪的問(wèn)題。奇怪的問(wèn)題往往是一個(gè)學(xué)習(xí)有關(guān)硬件新知識(shí)的機(jī)會(huì),而且總會(huì)形成新的最佳實(shí)踐。就是由于這個(gè)奇怪的問(wèn)題,我把“仔細(xì)觀察只讀/只寫(xiě)寄存器”添加到我的列表中,并確保我正確理解、使用這些寄存器。否則,讀取那個(gè)只寫(xiě)寄存器可能會(huì)給系統(tǒng)帶來(lái)生災(zāi)難性后果。
本文地址:http://m.54549.cn/thread-788834-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

相關(guān)在線工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表