發表文章

目前顯示的是 9月, 2022的文章

文章總列表

ESP32(8) Low Power

圖片
Low Power我踩過不少坑(如下),做起來曲折離奇,不得不解。雖然內心十分抗拒,還是得咬著牙搞定。這篇也是盡量原汁原味,呈現我做的傻事 http://lihgong.blogspot.com/2019/05/volvo-xc60-2.html http://lihgong.blogspot.com/2019/05/volvo-xc60-5low-power.html [Low Power 規格] CAN logger在汽車運作中,吃不到50mA,這程度對發電機完全無感,問題不大先忽視 引擎熄火開始吃電瓶,70Ah電瓶一顆約莫7000台幣,待機電流必須做得小才不會弄壞電池。定義規格:待機1年,吃1%電瓶,待機電流要壓到80uA。鉛電池自放電是每個月3%~10%,我訂的規格算是很嚴苛 70Ah*0.01 = 365*24h* 80uA Low Power選零件先決定一半:極小值是20uA!這裡的規格不開藍芽或無線網路 ESP32-C3 deep-sleep mode耗電量5uA TJA1042/3 standby mode耗電量10uA 5V LDO靜態耗電2.5uA 3.3V LDO靜態耗電2.5uA [先搞定硬體] CAN logger放車上,要搞定12v轉5v,拿先前做過的板子跳線加工一下。電源也加個二極體稍微隔離(理論上USB也要隔離,PCB已經做好沒辦法改)。跳線連接頭避免拉扯,用熱溶膠盡量固定,免得實驗做一半要維修。我的工藝水準真的有限,下面這團東西,感覺很不可靠啊 下圖是設計IDEA,原型驗證過做小板子會好得多 [睡眠機制] 先思考什麼時候要睡覺 汽車運作中,CAN Logger開始紀錄封包到SD卡,寫寫寫 等汽車熄火,CAN封包還會持續一段時間,最後停止 封包停止,ESP32-C3 SDK,接收CAN封包函數timeout設成4秒,然後去睡覺 [睡下去] 斷電前要做這些事 把所有GPIO pin review一輪,一般是設成input or output,檢查pull-up/ pull-down,避免從IO pin漏電。基本上low power這個是基本功 讓CAN收發晶片進Standby Mode省電,電流壓到10uA。這個狀態CAN bus任何擾動(bit#0, dominate)都會在RX pin輸出high-to-low,用這根pin喚醒ES

ESP32(7) 打通SD Card

圖片
這篇介紹怎麼打通SD card介面,因為太簡單了,先講古填充版面 [SD卡與我] 2009當阿兵哥感嘆被國家糟蹋的時光,必須做點什麼補償。放假我操起 J-Link 對S3C2410開發板寫Bootloader,十分健康的假日休閒。13年過去了,開發ESP32招數依舊差不多 開發板的SD卡槽連上SPI介面,從SPI Driver開始寫,照SD卡規範刻下圖那種狀態機,和創見2G記憶卡當朋友,不知不覺做起讀卡機了!小時候硬碟不開機,用DOS跑fdisk /mbr能救回 MBR (Master Boot Record),長大親手讀出記憶卡的MBR令我感動萬分!後續掛上FatFs,儲存空間搭配檔案系統才好用 感動另一面是恐懼,巨大的工作量忘不了(SPI/ SD-CARD IF/ DMA/ FATFS)。我玩STM32就很懶得弄;這次想做CAN bus logger,再怕都要搞定 source:  http://www.dejazzer.com/ee379/lecture_notes/lec12_sd_card.pdf [ESP32-C3] 隨手在網路找到 範例1 ,範例用ESP32-C3加上Lua Firmware不能用;倒是接線不是很複雜,先安定神經一下。稍微撈了ESP32-C3 SDK的文件,這幾篇看來有點用 FAT Filesystem Support SD/SDIO/MMC Driver SD SPI Host Driver 他們指出ESP32-C3 SDK有個簡單好用的 範例 ,去 SDK folder 撈到底下的範例 /HOME/.platformio/package/framework- espidf/examples/storage/sd_card/sdspi/main/sd_card_example_main.c 範例充滿註解,改一下針腳定義,編譯完就會動了!大概太多人都需要用SD卡,原廠SDK直接幫裝好給大家用也合情合理了 [速度考量] 勿在浮沙築高台,架起來後要看看有沒有坑 SPI初始資料結構有個欄位疑似能提高SPI clock,我試著從20Mhz拉高到24/25/26/40,全部都不能用,看起來只能跑20Mhz;也可能是杜邦線頻率上不去,這就不得而知了 修改範例,塞for-loop寫入4MB數據測試速度,大概15秒寫完,等於一秒鐘寫273KB。汽車50

ESP32(6) CAN Transceiver 挑選心得

圖片
曾經在CAN bus踩雷(看以下三篇),介紹一下最後的心得和結論:挑 TJA1042/3 就對了 http://lihgong.blogspot.com/2019/05/volvo-xc60-1.html http://lihgong.blogspot.com/2019/05/volvo-xc60-2.html http://lihgong.blogspot.com/2019/05/volvo-xc60-3.html [什麼是CAN bus] 簡單說,就是在車上用的BUS,如果想做點什麼放在車上,很難不跟CAN bus打交道;另外我的瑞典同事也在家裡部署的CAN Bus,他不是很信賴WiFi這類的東西(安全),CAN bus只有兩根線,差動信號夠可靠,而且也簡單 [CAN Bus Transceiver] 如前面描述的,CAN bus一對信號線是差動信號(differential pair),處理這信號的線路一定不會做在SOC裡面,因為不是所有人都要CAN bus,所以這東西放在IC裡,用不到的人就是垃圾,等於在浪費面積不划算;以這顆ESP32來說,WiFi收發機倒是直接內建了,因為這是他的賣點,對吧 所以一般是在SOC外部擺上一顆CAN bus收發晶片,他處理完差動信號後,轉成TX/RX一組線再連到MCU。常見的CAN bus收發晶片,或是我常用的,主要是底下這種SO8封裝 這裡就直接給上答案:如果design要放CAN bus,那我會大力推薦TJA1042/3。後面我會給出原因,這些原因會幫助你挑對Transceiver [5V CAN元件] 汽車CAN bus網路大概還會是5v系統,差動信號平常在2.5v,傳送資料會拉到3.5v/2.5v。注意這個是工業標準,ISO11898-2,電壓是沒得選的 https://elearning.vector.com/mod/page/view.php?id=4817 這顆TJA1042都是5v CAN bus元件,要吃5v的電。在ESP32這種板子上,還好透過USB供電本來就拿得到5v;我自己做的小板子會用第一級12v-to-5v,再從5v-to-3.3v降轉電壓供電 您可能會問,TI的 SN65HVD231 這種3.3v元件用在車上行不行?我測試結果:可以。原因一時半刻有點難解釋,用著總是擔心相容性(煩),建議就別折騰了

Rouvy單車減肥軟體

圖片
介紹單車減肥軟體Rouvy [先從效果說起] 今年健康檢查,肝膽腸胃超音波,肝臟右大葉脂肪分布不平均。醫生說,不是正在變胖,就是脂肪正在消退。我相信是後者 [Rouvy 介紹 ] Rouvy 是捷克的遊戲軟體,遊戲本體是影片播放器,Rouvy在世界各地錄製高畫質公路影片,可以到全世界各地看看。比如去非洲旅遊本來就難,到 南非開普敦 海岸公路飆車就更難了。玩起來像上圖那樣, Bianchi跑車 拆掉後輪裝在 智慧訓練台 ,勇腳妹仔一邊踩著車,一邊飽覽巴黎風光:快慢由人,這位少女就是在巴黎飆車的那種 Rouvy模擬了真實世界:推力是用訓練台回報的功率,阻力包括摩擦力(體重),重力(路線坡度),計算前進的速度,並且動態調整訓練台阻力。爬坡當然越陡的路線踩起來越重,不變速很難踩;丘陵地,下坡再上坡,遊戲也模擬了速度漸漸消耗,踏板逐漸變重 騎完會顯示一些統計資訊,我最感興趣是做功瓦數(熱量消耗),這條路線在地球上的真實位置,好似我真的去了希臘雅典的海灘騎車 也有整趟路線各種統計量,功率,心跳,迴轉速,速度 這些數據也能導入 Strava 跟運動同好分享,或是連動到 intervals.icu 看分析。像我喜歡操作在邊界區(Threshold),這個強度我能連續踩一小時,不會累到受不了 [Rouvy和減肥與健檢報告] Rouvy我最愛看下面這張圖!二月入坑到現在騎了90次,每次騎一小時,一次消耗600大卡。似乎體重有掉一點(70~72)->(69~70),肚子的泳圈似乎有消一點,其他就沒了。也許仗著有運動,吃得也多了! 600kCal:大概是一個便當的熱量 8100kCal:一公斤的脂肪熱量,要騎13次才燒得掉 40000kCal:理論上燒掉5公斤的脂肪 健康檢查報告(六月),體脂率依舊偏高,三酸甘油脂還是紅字,不大滿意;心電圖心臟跳動的電壓很強,醫生說不是心室肥大,就是運動員心臟很有力。上次(10年前)收到這個警告還是剛入行青春的肉體,覺得欣慰了。看看明年紅字能不能消多一點,解決輕度脂肪肝 [Rouvy與裝備] 看到這裡,想入坑嗎?大概要準備這些東西,瘋狂流汗吧! 智慧訓練台 真的公路車 電視+筆電/ 手機/ 平板擇一;我覺得電視最讚,大片即是正義,沈浸感! Rouvy軟體授權,到 台灣社團 找人一起買家庭方案,一年約1000台幣 喔對,記得要準備電風扇散熱:對踏板做功

ESP32(5) 打通CAN Bus

圖片
這篇紀錄一般SDK會怎麼玩,原汁原味呈現一段ESP32-C3的白痴DEBUG過程 [硬體設定] 開發板作者 給的硬體資料完全可以信嗎?我不確定。這顆IC只有32pins,還算可以每根review的狀態。閱讀 線路圖 , datasheet , 自己整理一份 。整理完會對IC和SDK更有信心 TYPE-C是開發板最佳定位點,標在Spreadsheet上面的位置標好 不要碰的PIN標紅色 USB+/ USB-是JTAG debugger,DONT TOUCH,碰了USB會斷線 GPIO9/ GPIO9是BOOT/LOG,別碰,具體定義能看Datasheet CHIP_EN是RESET pin,除非要從外部Reset ESP32-C,不然沒必要碰 PWB是 電源元件LDO 的EN pin,切斷壓低耗電到1uA,現在不用碰 IC上有限制的pin特別標示出來,可以選,先不碰這些pin ADC一般只放在特定pin FSPI(Fast SPI)系列,好像只有特別針腳才能用,我也不確定;先標出來 最後的結果好像也沒特別精美,起碼我是有fu了 [CAN Bus踩坑] CAN Bus就是汽車內的網路,我有寫過 一些文章 ,撈"汽車電子"。我本來預計2小時要打通ESP32-C3的CAN bus,最後用了10個小時,桌子也變下面那樣。整個錯誤也很白癡: 人家driver要你先呼叫twai_start()才可以用啊 !!! 記錄一下10個鐘頭做了些什麼 研究針腳定義,先整理試算表,找出不能用的PIN。ESP32-C3的GPIO MUX可以導向CAN的TX/RX pin到任意GPIO PIN,我不要碰紅色PIN就好。這種MUX和繞線都會佔一定面積,到了40nm,把任意功能導到任意pin真的還好;先進製程萬歲! 把開發板請上麵包版,放上CAN收發晶片,加上OBD2接頭。我手邊本來就有樹莓派組好的CAN bus網路,現在網路上有封包了,就等ESP32-C3收下 閱讀SDK API文件 ,看起來很簡單,內容和我預期的CAN Bus差不多。文件後面似乎也有範例程式,好像也滿簡單的,開工吧。寫完以後果然不會動,難道是pin選錯嗎?換了一堆pin還是不會動 CAN收發晶片 MCP2551 壞掉嗎?出動scope檢查信號,一切正常。不過這顆CAN收發晶片是5v,ESP32-C3是3.3v

ESP32(4) ESP32-C3搭配Arduino

圖片
這篇簡單介紹怎麼在ESP32-C3跑起Arduino,還有一些思考的結果 [我認知的Arduino] 用SDK開發像開手排車,開發者得處理所有的 細節 ,大一點的系統甚至得要一個team來處理;簡化的方法也簡單,用廠商給的預設組態先玩,出問題再找FAE幫忙解答。走SDK開發這路,每換一家廠商都是生命攸關的大事,畢竟底層的操作方法全換了 Arduino把底層介面包裝成 一致性 的介面,讓LED一閃一閃亮晶晶變得無比簡單。他整體的體驗還包括一致編輯器,程式庫下載器,除錯器。邏輯是Arduino規定了工具的操作介面,由廠商或熱心開發者配合Arduino的邏輯,加入生態(用的人多!) 選擇Arduino代表放棄某些彈性,換來輕易上手的介面。很多應用,或是製作原型,真的不需要搞清楚所有細節,這些細節真的多到很靠腰啊... [ESP32-C3 + Arduino IDE] 下載Arduino IDE,很快就在ESP32-C3跑起Blinky範例。官網最新版(2022/9/17)很乾脆的說,ESP32-C不支援Debugger。這當然是假的,專做debugger軟體, visualgdb 就有給出範例 正確的翻譯是:ESP32-C當然能用JTAG debugger,只是廠商還沒把介面修改成Arduino IDE認可的樣子,所以不能用 [JTAG原理/ Debugger原理] JTAG硬體實作和scan chain有莫大的關聯,底下有段我發佈在PTT的心得是ARM7的紀錄,現代CPU應該沒這麼做了;大家可以讀一下,JTAG本身沒什麼神秘之處 程式build完產生執行檔,除錯軟體解析執行檔,載入到記憶體開始執行。上述的visualgdb,或是Arduino內建的debugger,或是platformIO都能做到,並沒有特別之處。現在的差異只剩下:Arduino IDE裡面的debugger,還沒人接上ESP32-C3 [ESP32-C + PlatformIO + Arduino] 在PlatformIO裡要架起Arduino倒是意想不到的簡單,基本上和 上一篇 幾乎一樣,差異只有framework = arduino這行。底下的範例也同時產生Release/ Debug兩種組態。照著一般build flow跑,然後就能debug了 [env] platform = espress

ESP32(3) Visual Studio Code + PlatformIO開發環境

圖片
這篇介紹ESP32-C開發環境,我打算使用Espressif SDK搭配Visual Studio Code + PlatformIO開發。軟體開發本質超級複雜,努力踩坑撐過去吧 [書籍] 我用以下這本參考書,他用Visual Studio Code + PlatformIO搭配ESP32 SDK開發,這本書非常合乎我的預期:省略大量細節。把書本當成地圖,大概知道哪裡可以怎麼做,然後努力享受被折磨的樂趣吧! [相關文件和網站] 一般開發會準備這些文件,以下是我踩坑後的筆記 開發板相關 開發板主頁 線路圖 Flash mode CPU核心相關 ESP32-C3 datasheet ESP32-C3 Technical Reference Manual ESP32-C3 Programming Guide PlatformIO相關頁面(開發環境) PlatformIO選這片開發版,他每片都有網站,也有vendor的頁面,我一個一個找出來的。選錯真的會出問題,為了減少麻煩,建議買板子要挑人家認證過的,或是找個老司機帶路 PlatformIO裡面認定的開發板主頁 在Windows安裝driver platformio.ini設定 ,debug_tool/ upload_protoccol設定成esp-builtin才會動;然後env的設定改成下面這樣能讓debug/release build放在不同目錄,可以節省很多時間 PlatformIO, ESP32一般性資訊 [PlatformIO相關路徑] 這種IDE隱藏的細節,全部要自己挖出來,尤其是廠商的範例程式碼 Development Tools /c/user/name/.platformio/platforms/espressif32/ Board definition, boards/airm2m_core_esp32c3.json 這個檔案最大的坑是Flash_mode如果設錯就掛了(其他板子用qio) Tool folders /c/user/name/.platformio/packages/ Compiler for ESP32-C, toolchain-riscv32-esp/ Tool for debugger, tool-openocd-esp32/ ESP32 SDK, framework-espid

ESP32(2) ESP32-C開發板硬體簡介

圖片
這篇文章感謝 夜市小霸王 尤濬哲教授。最近想折騰ESP32,逛 露天賣場 買書與板子順便和教授搭訕,討論 JLink和ESP32使用問題 。教授很大方寄了ESP-PROG和ESP32-C給我,才有這篇文章。再次感謝! [為什麼選ESP32-C] 先從功能說起,三組設備都有除錯器和COM port,接上電腦就能設斷點,看輸出。最左邊那片ESP32-C3很神奇,一顆IC同時有ESP32-C3/ JTAG/ COM的功能,同時啟動 看照片,應該就知道我喜歡哪組了。最左邊的ESP32-C3開發板上面沒幾顆IC,設定起來用,在家或外出都非常方便。另外兩組體積真的很大,線材也多 另外兩組用杜邦線連接開發板和除錯器,我覺得杜邦線不可靠:他可能斷掉,或被扯掉。ESP-PROG那組JTAG只能跑4Mhz,J-Link能跑上12Mhz;ESP32-C3內建的JTAG用USB 2.0傳輸,天生就跑在12Mhz,因為是IC直接出USB port,少掉杜邦線天生就穩定。這兩組使用的感覺,踩過什麼坑,那就以後再寫了(暫時不想碰它們) ESP32-C整合常見的USB-to-UART和USB-to-JTAG,開發板能省掉一顆CP2102,客人也不用外掛除錯器。其實這個事很神奇,放上USB-PHY顯然是成本,有USB-PHY卻不能開發USB,只是給客人爽爽用,我不大理解 來找答案吧!ESP32的照片可能有線索:左上角WIFI接收機和CPU只佔一點點面積!第二張圖能看出大片面積的SRAM/Flash。我的推論是:USB-PHY是要花錢沒錯,用40nm放這些線路也不貴,客人也用得爽,那就放吧!使用先進製程打造的MCU,對於面積更有餘裕 src1 src2 原因我找到了,我在他們文件看到(但是忘記在哪裡了):這顆IC只有32 pins,只剩22 pins給客人用;開滿全套debug (UART TX/ RX(2pins) + JTAG(4pins)),客人剩16pins能用,這顆IC就不用賣錢了;所以擺個USB-PHY 2pins,這樣客人還有20pins能用。算是不得不為的策略(我就想說不可能那麼好心...) 至於ESP32-C3能做到多小, Seeed Xiao ESP32-C3 真是不可思議的小,拿來塞在VOLVO+專案想到就很SEXY [ESP32-C3的缺點] 根據 data sheet ,ES

ESP32(1) 閒聊

圖片
我有個 VOLVO+ 專案,使用STM32F103C8T6開發。這顆MCU簡單的資料如下 2007 Cortex-M3 at 72Mhz, 64K Flash, 20K SRAM 180nm node 這顆15歲的IC依舊很好用,最大的遺憾是沒有無線介面(藍芽或WiFi),我想要VOLVO+也能用手機就去操控他,所以就來物色其他MCU了 查了一下 ESP32-C3 的規格書,支援WiFi和藍芽,還有CAN Bus 2020/11發布 RISC-V at 160Mhz, 400KB SRAM, 384KB Flash 40nm node 先從製程說起,180nm對上40nm是五代製程的差距(180/ 130/ 90/ 65/ 40)。同面積40nm能塞入16倍的電晶體,更不用說ESP32-C3面積還比STM32F103C8T6小顆!以SRAM來說,兩者就有20倍的差距(20K vs. 400K);還內建WiFi和藍芽周邊。40nm加持,一堆周邊像不用錢就堆上去了 一般公司大概會考慮多放上一顆藍牙晶片做功能擴充。我是一人團隊,只要我願意不怕折騰,動手即可 ESP32系列用的人也多,不怕找不到資料,於是我入了第二個坑,作為下班額外的嗜好 不知道您有沒有注意,ESP32C3用的是RISC-V。2015年6月 David Patternson 演講,他送每個人一張RISC-V instruction set表。多年過去了,如今RISC-V正侵蝕ARM Cortex-M3的地盤。商品化的RISC-V也到達我手上 稍微炫耀一下,讀過 Computer Architecture 教科書的人很多,有作者簽名的人應該很少吧。在IC設計工作,參與專案提出架構改進,也是這個行業特有的“福利”。確實如大師所言,設計更好的電腦,是極其幸運的事 BEST OF LUCK DESIGNING BETTER COMPUTERS

閒聊:J-Link (2)

如果你的JLink V10不小心變磚塊,這篇文章介紹怎麼變回來 [背景介紹] 我長期用SEGGER J-Link開發,對工具超有愛。2019入手第二顆EDU"升級" V10 ,因為速度能跑上High Speed USB 480Mbits/s,好香啊!升級工具快上0.1秒,但是解Bug並沒有加速,一點用也沒有。沒關係,爽最重要 偶然看到中國的論壇有些指令,輸入竟然能給EDU增加功能,用不到心裡也爽 Exec SetSN=XXXXXXXX Exec AddFeature GDB Exec AddFeature RDI Exec AddFeature FlashBP Exec AddFeature FlashDL Exec AddFeature JFlash Exec AddFeature RDDI 然後悲劇發生了:SEGGER增加 保護 ,序號26開頭EDU不該有JFlash或RDI,升級韌體讓J-Link變磚,真是兇悍。解法也簡單,灌舊版Driver降級FW。敲進去的Feature不能還原,客人只是想從良還原也不能了... Exec InvalidateFW [折騰] 後來找到這位BanXian(半仙) 救回EDU 軟體,可以返回原狀。好笑的是:軟體是用J-Link的韌體bug開發的 EDUReViver -run revive this payload remove all extra features EDUReViver -run swd this payload unlocking SWD debug port on PCB EDUReViver -run swd off this payload locking SWD debug port on PCB again EDUReViver -run to11 this payload turns your V10 to V11. unplug and replug usb cable, then flash new firmware in jlink commander EDUReViver -run to10 this payload turns your V11 to V10. unplug and replug usb cable, then flash new firmware i