yj hung

I3C (bus) using in STM32H5 series

前言 MIPI在I2C的基礎上誕生了I3C,它與I2C一樣使用兩根線,並且支援IBI中斷和熱拔插,同時頻率可以達到較高的頻率,因為它與I2C不同,I2C兩根引腳使用的 是開漏輸出,開漏內部接地是無法輸出高電平的,如果需要輸出高電平必須外接上拉電阻才能實現高電平輸出,但是電阻會阻礙電流導通,所以會比較耗時,I2C 最高也才達到5MB,但I3C可達12.5MB,且功能比I2C強大許多且它支援I2C,向前相容。 I3C Bus介紹 MIPI I3C 結合了傳統I2C和SPI介面的關鍵屬性,以提供統一的、高效能、極低功耗的解決方案。I3C介面使用的跟I2C類似,也是一條漏級數據線(SDA)和一條推挽式時脈線(SCL),該SDA線上的從設備可以控制資料匯流排,並且可以啟動中斷。主控透過此SCL線可以將匯流排的時脈頻率調節到12.5MHZ。I3C支援多種類型設備,包括Main Master(目前主設備),secondary master(輔助主設備)、I3C Slave、I2C Slave。 I2C Vs I3C 與 I2C 模式相比,I3C 還降低了功耗,並在 12.5MHz 下提供了更高的資料速率。 I3C仍然支援I2C的ACK確認方式,只是某些情況下I3C要求只能使用I3C的方式來進行ACK,這麼做的目的是忽略掉總線上I2C的設備, 例如分配動態位址是時不想讓I2C設備參與進來那麼久使用這個方式來忽略掉I2C設備,因為傳統I2C設備只會在SCL拉高時來確認ACK,如果I3C將SCL拉低那麼I2C設備會把此 次通訊視為沒有ACK訊息視為失敗則放棄本次通訊 I3C dedicated VDDIO2 supply pin 專用電源接腳 VDDIO2 降至 1.08V。 因此,包括I3C在內的所有這些通訊介面都可以工作電壓為 1.2V STM32CubeMX – I3C 配置 Bus characteristics 這邊針對2個case計算配置 Sample code 這邊以ST官方這邊提供6種模式範例提供選擇依照客戶需求確認即可 參考

I3C (bus) using in STM32H5 series Read More »

ECDSA_SignVerify(SHA256) STM32F4 series

前言 針對驗證簽名部分,因近期客戶需求但MCU部分被綁定無法放入SBSFU去做更新,而且SBSFU更新部分目前提供範例也僅UART,其他interface需要自己coding,最後這邊討論後只做簽名驗證來防程式被修改,該章節會介紹簽名驗證流程和原SBSFU流程 參考軟體包 這邊因單純驗證簽名因此直接參考x-cube-cryptolib即可,因這邊使用F4系列所以這邊參考比較舊相近系列L152,因G4或L4是相對較新的系列避免有些Function不存在 圖解流程基本上如下 其實可以看到MCU會需要處理部分主要是把資料轉換,因這邊選用是SHA256所以是把檔案轉換SHA256格式,再透過ECC校驗,這邊公/私鑰匙的生成是透過OpenSLL生成,使用為外部軟體非在MCU內執行生成 SBSFU簡介 因SBSFU是包含加密更新部分,而F4是屬於比較舊款因此支援部分沒有到這麼多參考圖如下 而已更新步驟來說會如圖,因此你可以看到如果需要加密更新你的code size不能太大另外,或你的Flash size需要夠大(APP Code需要2倍大小,這邊大概說明流程,因這次只使用到驗證簽名部分所以這邊就不詳細說明 ECC驗證簽名Code 在程式上會分成2部分 Boot code和APP code,App code部分比較簡單會透過外部軟體所增加標頭檔部分打包起來 這邊主要2個檔案需要修改1.system_stm32f4xx.c2.ld檔案 這邊是用python寫外部加密打包檔案這邊跟MCU較不相關未來再詳細說明 把APP剛剛規劃標頭檔相關位置填入,因驗證部分會需要知道相關資料位置 在執行檔中需要把Key引用帶入,在執行檔最後加入下方 鑰匙部分也是需要call外部軟體生成(OpenSLL) 最後在main.c部分就比較簡單主要是把加密驗證簽名部分補上即可,前半在做把鑰匙BIN和簽名BIN輸入陣列中 參考

ECDSA_SignVerify(SHA256) STM32F4 series Read More »

NMI interrupt trigger issue for STM32GXX

前言 客戶使用STM32G491MCT6料號,但遇到試產階端有部分料件在讀Flash會卡住,這邊因在一般測試都沒有遇到,只能靠經驗摸索,使用PC counter最後發現所提的位置都在NMI interrupt,這個問題找尋資料偏少,由此紀錄一下。 NMI Interrupt介紹 在計算中,不可屏蔽中斷(NMI)是一種硬件中斷,系統的標準中斷屏蔽技術無法忽略它。這樣做通常是為了警告不可恢復的硬件錯誤。某些 NMI 可能會被屏蔽,在這種情況下,您應該使用您自己的特定於特定 NMI 的方法。 當響應時間至關重要或在正常系統操作期間不應禁用中斷時,通常會使用 NMI。此類用途包括報告不可恢復的硬件錯誤、系統調試和分析以及處理系統重置等特殊情況。 可以看到圖表會觸發NMI中斷的有SRAM parity error/Flash ECC/HSE CSS Case1:Clock security (CSS) configuring HSE and CSS in RCC, and shorting one of the HSE pins to something else, but it might void your warranty. 這邊解法基本上就是去看HSE等硬體問題 Case2:SRAM parity error The parity bits are computed and stored when

NMI interrupt trigger issue for STM32GXX Read More »

ST7735 TFT LCD Module with 4 IO 128*160

前言 LCD的選擇有很多種,尺寸也很多,但若需要顯示彩色的畫面,這邊推薦ST7735, CP值最高,效果也不錯的。本範例將介紹ST7735 彩色1.8吋顯示螢幕與STM32的使用方式。這邊參考Arduino Adafruit函式庫,函式庫為所有的LCD和OLED顯示器提供了通用語法和圖形功能。 接線說明 這邊可以參考以下說明 Sample Code 這邊可以直接移植Arduino或網路直接抓Driver這塊因為便宜有更多人選用開放資源也很多 以下2個是最常使用到Function 下面可以看到是常用Fuction詳細內容 影片參考 ST7735驅動程式設計要點 參考

ST7735 TFT LCD Module with 4 IO 128*160 Read More »

STM32 IAP Advanced redirect using SRAM

前言 這邊因為需求在開發USB DFU 時範例都是使用外部pin腳去做切換,但實際上使用情況是會址接USB或其他Interface去下達指令,使其去切換APP or Bootloader mode,但如果使用Flash當flag使用會受限於10K 次使用次數限制,這邊其實還可以使用SRAM去做 實作 基本上要在SRAM上作區塊來使用,切記要點是不能斷電,因斷電會讓SRAM reset這邊Flag就會被清除下面就可以參考SRAM位置宣告方式 針對SRAM位置可以參考Flash ld檔 因這邊是選用STM32F401RET6因此SRAM起始區域是從0x20000000開始,另外我們要使用區域要不能被初始化,不然每次在MCU reset時會導致SRAM內資料被清除,所以我們這邊選擇的END_SRAM_ADDR 會是從0x20017FEC為最後一個,SIZE也不是原先的96KB而是96KB-所要使用區域,而這個區塊就是不會受到MCU reset等影響 這邊可以看到可以使用指標形式去存取特定位置的address來當成旗標使用 參考

STM32 IAP Advanced redirect using SRAM Read More »

How to use “attribute” in STM32CubeIDE

前言 attribute__的作用就是將變量或者數組存在指定的地址。在實際應用中一般將程序的版本信息固定在特定的flash地址。這邊因要協助修改讓Hex燒入檔案能可以認到版本資訊,但嚐試使用STM32CcubeIDE後發現,無法使用,但KEIL卻是正常的,找尋網路方式但都試不出來會出現錯誤,最後發現正確使用方式 修改ld文件 這邊因為STM32CubeIDE這邊在Flash LD檔與KEIL方式不同,因此如果需要使用“attribute”這一快是需要修正的第一步需要先在主MEMORY那邊宣告你所需要使用區塊 第二步是在/* Sections */內部新增 在繼續在ld文件的下面進行修改。這裡就要特別注意了。 .VERSION : 是在main函數之前定義的數組的名字。KEEP(*(.MCU_version))是main函數之前定義的section()中的名字。Version尖括號後的是在前面的ld文件中添加的。到這裡 ,就能正常編譯了。在main.c內使用如下(需要宣告在main loop外) 結果圖如下可以看到最下面多出設定位置與數值 LD檔完整附錄 參考

How to use “attribute” in STM32CubeIDE Read More »

STM32 I2C Slave (HALL Lib)

前言 這邊因有I2C slave需求,但因之前使用的LL寫法在舊款MCU中部份Lib是沒有的,因此這邊只能使用HALL Lib撰寫,但HALL Lib限制就是不指定長度接收寫法相對複雜很多,這邊因使用情境式類似sensor 方式,因次HALL Lib是相對足夠的 STM32CubeMX Setup 這邊沒有麼特別的,只有跟LL Lib相同需要留意Slave address不能為0x00另外中斷部分需要開啟,包含ERROR部分因為Slave傳輸資料時候會使用到 Sample Code (HALL Lib) 這邊需要注意是中斷在主程式中是需要被開啟的這個Function是會常使用到的 這邊會宣告一個陣列去接要發送的data 另外他的Call Back也會使用到 首先要先針對Address 的Callback這邊會判讀收還是發,但這邊不管是收data還是發data都一開始都會先進到I2C_DIRECTION_TRANSMIT判讀這邊可以撰寫第一筆資訊去區分是要做哪個動作也就是RxData[0],其中參考網路範例他第一筆data是用來判讀發送data的第幾個位置這邊可以依據需求修改或刪除 傳輸資料的CallBack比較簡單,這邊只要留意是I2C_NEXT_FRAME,這邊實際去量測會發現最後一筆都是NACK但不影響Master判讀 因為傳輸最後一筆會NACK所以這邊會進到ERROR CallBack這邊主要2個ERROR要注意一個是AF和BERR,其中進到ERROR後藥劑的再把中斷開啟 結論 這邊會依照不同需求可以選用LL或HAL去撰寫I2C Slave code,HAL Lib比較麻煩的地方在於接收部定長度資料部分,會很容易卡住假如不知道傳輸資料長度,會比較建議使用LL Lib方式撰寫,但如果是依據sensor方式讀取這邊HAL其實會比較直覺化,另外一個小要點就是在傳資料與接收資料地方不要寫其他動作會延遲訊號傳輸,容易導致傳輸失敗或訊號判讀錯誤另外我非常推薦下面參考部分的影片她非常好的講述流程 參考

STM32 I2C Slave (HALL Lib) Read More »

ST Motor Control Use Case and Debug

前言 客戶使用MCSDK5.4.8生成Hall sensor的code,但在馬達有負載起轉時候會出現馬達激磁聲音,但code部分並未新增甚麼東西,僅讓馬達停止後再起轉,這邊使用DAC接口方便Debug,最終找到演算法與部分需要改動與硬體需要調整部分解決了此問題 問題 這邊在起步出現激磁聲音,先確定相電流出現異常波形長如何,又因此Case是使用Hall sensor去做回授非sensorless,這邊去量測Hall訊號組合出下圖,看的出來再Hall訊號出現快速上下震盪,有些像HFI,但在MCSDK5.4.8這塊是被拔除的。 Debug過程 第一步:因不確定是不是在不對狀態下切換導致,因此先抓取Motor控制狀態,確保到idel狀態在進入馬達起轉或停止 第二步:結果做完第一步後也還是存在問題,接下來就一步一步查詢訊號異常部分來源是在哪邊但可以看到下圖異常部分Id是正常的,沒有注入雜訊,又發現Iq是有實際指令讓馬達去達到目標 第三步:確認是軟體部分後就去切開是回授端出問題還是順向端出問題,使用senorless run後並無發生起步問題,問題縮窄至Hall 回授先做一些調整,查看公版與打版差異,使用Hall回授公版會出現錯誤無法起轉,因此這邊提高Hall的濾雜訊電容,再把其提高,發生頻率有在減小 軟體解決方案 這邊確認後MCSDK5.4.8在起轉時並不是使用六部方波起轉完後再切換至FOC,因此會有空白區域預猜現象,只要有雜訊出現就會使其猜不准出現震盪 因此這邊會從HALL_CalcElAngle in hall_speed_pos_fdbk.c下手詢問原廠後再6.1.2有針對這部分做修正,因此把修正部分加入 參考

ST Motor Control Use Case and Debug Read More »

ST Motor Control Adjust Method-2

前言 此章節會針對MCSDK 常遇到問題去做講解與調整介紹,相關資料位置也會整理出來方便大家在馬達控制上更加快速上手 MCSDK程式主結構 在使用MCSDK Gen code出來,主程式段落與數學對照式如下圖 ST這邊提供3種方案去補強需求下面會介紹這3種方案MTPA/Feed Forward/Flux weakening,這3種方案都可以直接在MCSDK上勾選開啟 MTPA(Maximum Torque Per Ampere) MTPA控制方式與id=0控制方式的區別 這個從轉矩方程最容易看出來,轉矩分為永磁轉矩Tr和磁阻轉矩Tm,而id=0只剩下Tr。這會導致電流的利用率不高,系統的效率降低。所以id=0的控制比較適用於隱極式電機(Ld=Lq),而對於凸極式電機並不最優,所以需要重新考慮控制策略。 Flux Weakening 弱磁即減弱磁通,該方法以降低轉矩為代價,使電機轉速超過其額定轉速。 弱磁控制減弱了永磁體產生的氣隙磁鏈 λpm的影響,從而降低了得到的 d 軸磁通 λd。如圖 Feed Forward 僅具有前饋行為的控制系統對其控制信號以預先定義的方式作出響應,不會對負載作出響應;它與同樣具有反饋的系統形成對比,反饋系統根據輸出如何影響負載,以及負載可能會如何變化來調整輸出;負載變化視為系統的外部環境。 常見問題 Problem: ‘SW error’ fault message appears and the motor do not even try to start Source: the FOC execution rate is too high and computation can not

ST Motor Control Adjust Method-2 Read More »

MERIDIAN Thermal Imager Sensor(STM32)

前言 Meridian提供先進的CMOS熱影像解決方案,使能夠量產接收紅外線波長8~14μm的熱影像感測器,主要應用於消費與商用產品.與一般Image最大不同點在於價格低,與所需要的算力MCU即可處理大大降低應用成本其中MI0802熱影像感測模組:包括thermal sensor, Lens鏡頭, 64 KB Flash記憶體, PCBA 10-pin FPC連接器。 How do Thermal Imager sensor work? 熱影像感測器原理,物體的熱幅射經由Lens鏡頭蒐集能量,通過選定的光譜頻帶Filter,到達pixel detector轉換紅外線IR成電子訊號,透過放大器與訊號處理將電子訊號轉換成溫度影像,每一個像素pixel代表一個溫度值並且可以即時彩色顯示影像。 MI48Dx Thermal Image Processor MI48Dx 熱影像處理器是用來搭配MI0802熱影像感測模組.主要功能是處理每一個pixel的校正calibration,執行壞點修正bad pixel correction (BPC), 轉換raw data資料為溫度並抑制pixel雜訊。簡單說就是一顆小MCU,先幫你處理好前面的校準clock ,因其走的規格非常規intil 8080 可以自己對街MCU但透過MI48轉接會相對方便快速 Hardwave接線 可以看下圖總共有12pin 需要連接,留意這邊 8 ,11 ,12 pin都要接就算沒用到耶要接GND in ADDR (pin 11 of the 12 pins header) in order to use slave address of

MERIDIAN Thermal Imager Sensor(STM32) Read More »

Shopping Cart