# M4開發版開發筆記 ###### tags: `M4` `MVMC-lab` `開發板` ## 相關資料 [實驗室開發版系列](/oAKbYvdIQ96HpeqE47vmUQ) ## 硬體功能方塊 ![](https://i.imgur.com/eLnjq6T.png) 開發板由兩顆微處理器集合而成:分為主控(Major)與副控(Minor) - 主控微控器提供的服務有:**ASA BUS通訊**、**RTC模組**、**Flash disc管理**、**40 PIN I/O**,又**40 PIN I/O**主要提供的服務包含 Timer、PWM、AD/DAC、UART、SPI、I2C等。 - 副控微控器提供的服務有:轉換主控微控器的UART封包至USB封包、掌控開發板的ASAID、 ## ASA系列開發版`標`配 ### ASA BUS > 筆記撰寫時間2022/4月,ASABUS仍處於欲盡不盡狀態。 > 筆者在繪製此開發版期間(2021/7月),大學長要求要繼續使用此設計。 [ASABUS介紹](https://hackmd.io/j_8tzdbbRZWUBZcjpTfwzQ) M4開發版上,使用的晶片工作電壓為3.3V,為了避免高電壓進入,在ASABUS上補上level shifter進行電位轉換。 原本使用TXB0108晶片,但在其他專案使用此晶片的**翔竣**學長遇到這顆晶片的問題並整理了文件: :::info **TXB0108問題** 此IC特性為執行任意電壓到任意電壓的雙向電位轉換,並自動檢測方向。 - 不適用在漏極開路(OD, open drain)的電路,例如I2C - 較適合用在UART中 - 唯一無法與該芯片配合使用的是i2c(因為它使用了強上拉電路,這會混淆自動方向傳感器)。如果需要使用上拉電阻,至少需要50K歐姆以上。 - I / O線上的上拉或下拉電阻TXB0108設計用於驅動高達70 pF的電容性負載。TXB0108的輸出驅動器具有較低的直流驅動強度。如果上拉或下拉電阻從外部連接到數據I / O,則其值必須保持高於50k ohm,以確保它們不與TXB0108的輸出驅動器競爭。 因此改用TXS0108,但須注意的可能問題有: - 該設備已經具有內部10kohm電阻,因此外部上拉電阻很多餘,並導致多餘的電流流入I2C設備。 - 該器件需要在“高壓”側(在這種情況下為5V)上具有輕的電容性負載才能正常工作(所有無源型電壓轉換器也是如此)。 - 不能用來驅動LED - 傳輸線不能太長,會有電容累積的問題 - 1.8V轉5V可能不太適合 - 最大支援110Mbps(Push Pull)/1.2Mbps(Open drain)的速率 德州儀器原廠建議針對I2C通訊介面的電壓轉換,改用以下兩種較佳 - PCA9306 (2-bit bidirectional I2C bus and SMBus voltage-level shifter) - TCA9517 (Level-shifting I2C bus repeater) (但只有2條線可給I2C專用,不符合現在6條線的需求) 以下為國外網友自行測試TXS/B 02/04/08可靠性 測試了TXS 02/04/08和TXB 02/04/08等,發現08版本不可靠。但是02/04可以。所以我已經使用02/04一段時間了,沒有任何問題。 我的結論是,對於I2C 100 kHz,在開漏模式下TXS/B 02/04可以使用短於30cm的導線,但對於推/拉模式應用通常不可靠。 就在幾天前,我了解到I2C導線不能超過6英寸左右,否則您可能會遇到傳輸問題。 **(引用自莊翔竣學長所寫的筆記<<TXB0108問題整理1100113>>)** ::: 並且同時期同學在SPI模組中使用TXB也產生了SPI通訊內容錯誤問題,因此最終版本中決定使用TXS當作ASABUS中的level shifter。 ![](https://i.imgur.com/dtkcKFt.png) ![](https://i.imgur.com/NAckMs6.png) 除了**CS/SS**與UART的**TX/RX**設計較為不同外(會在稍後章節做詳細說明),其餘PIN與level shifter之間的設計邏輯為:![](https://i.imgur.com/3KAIFTG.png) ### ASA ID、Master/Slave Seclect >從V3開始主控晶片與PC端通訊橋梁由FT232更改為atmega16U4: [16U4介紹](https://hackmd.io/JiKtGbkESTKBPib_TXMB5A) 除了原先FT232的:UART與USB之間做轉換。16U4還掌控了開發版的狀態,如:Master/Slave、Prog/Run、ASA ID number。 M128 V3版本開始將開發版設計為"中性版",中性版的定義為串列通訊中Master/Slave身分的"中性",也就是說可以任意改變此開發版為Master或者是Slave。而所謂Master/Slave的表現可參考上面**16U4介紹**中的主/樸章節。 由於M4開發板的設計全由V3使用心得衍伸的,因此這邊又需要讀者先行了解V3開發板上出現的硬體問題:[V3板BUG](https://hackmd.io/jRp7tShyQa-jSVSTQ-VfOQ) #### SPI的Master/Slave狀態 SPI在Master/Slave區別在於CS/SS路徑 在**Master**模式下CS走線為: ![](https://i.imgur.com/hAi9MlJ.png) 在**Slave**模式下SS走線為: (16U4在接收到來自ASA BUS的SS訊號拉低後進入中斷,此時判讀ASA BUS上的`ASAID`是否與此板的`ASAID`相同,若相同才會將SS輸出至主控晶片) :::warning 如上一小節所述,ASA BUS漸漸沒在使用。此設計所產生的delay是否會造成問題尚未驗證! ::: ![](https://i.imgur.com/LH6sIWo.png) #### UART的Master/Slave狀態 除此之外,V3在UART Master/Slave設計與40 PIN JUMPER設計存在衝突(詳見下一小節40 PIN I/O中提到的[V3 主控電路](https://hackmd.io/oL1haDvjQHOjV1UI4NtWQw)):Jumper使用於UART上後會造成Slave模式下主板的TX連接到自己的RX上,RX連到自己的TX上。 在M4設計上以周邊硬體數量解決上述問題(詳細硬體分布於後續章節介紹),因此這部分走線設計與V3無差別。 ### 40 PIN I/O > 這塊PIN設計的淵源可參考[V3 主控電路](https://hackmd.io/oL1haDvjQHOjV1UI4NtWQw)中的Jumper章節,會有此設計基本上是由XXX的創意發想而來。 筆者在使用過後沒有感受到設計想解決的議題,反而還帶來許多使用上的不便,因此在M4這塊設計上不繼續延續這個傳統。 由V3使用上的悲慘體驗,歸納出M4在40PIN I/O的選定原則: - 常用硬體的相關PIN腳提供數量要多 - GPIO盡量做到編號連續 - 與ASA BUS硬體功能完全獨立 整理實驗室最可能觸及到的周邊有:**DAC、ADC、PWM、TIMER、SPI、TWI、UART**。 於是有了以下候選者: ![](https://i.imgur.com/8Jyw0R6.png) >**SERCOM**為此晶片特有的周邊硬體,他能在各種串列通訊模式間進行切換。 **TC、TCC**基本上同樣為Timer/Counter硬體,可為一般Timer使用,也可PWM使用。而**TCC**與**TC**不同之處為:**TCC**相較為**TC**有更高的精確度與自由度,規格書上**TCC**的全名為<Timer/Counter for motor Contor>。 以下為40 PIN I/O Port成品 ![](https://i.imgur.com/sDWcwF4.png) :::warning 跟ASA BUS設計不同,40 PIN I/O Port處不考慮與實驗室開發版相容問題,因此這塊不連接level shifter,使用者請注意小心。 ::: ## 其他區塊介紹 ### Ether > 從M3開始發展(? > 在大神carry出這個模組後一直被放置至今,M4版本也只是預先開好硬體空間,韌體還沒開發,走線沒測試過是否會有問題,待後人測試繼續改進。 ![](https://i.imgur.com/Ip6JPx3.png) ![](https://i.imgur.com/6wVANDZ.png) ### Clock > 請參考[MCU主控板基本電路](https://hackmd.io/8CfD7A1cTvm9Xl9kPnAM3w),或稱最小系統。 > ARM系列通常可以掛載兩個高速clock及一個低速clock,M4開發版為考量40PIN I/O完整性,只掛了一個高速clock。