# M4開發版開發筆記
###### tags: `M4` `MVMC-lab` `開發板`
## 相關資料
[實驗室開發版系列](/oAKbYvdIQ96HpeqE47vmUQ)
## 硬體功能方塊

開發板由兩顆微處理器集合而成:分為主控(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。


除了**CS/SS**與UART的**TX/RX**設計較為不同外(會在稍後章節做詳細說明),其餘PIN與level shifter之間的設計邏輯為:
### 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走線為:

在**Slave**模式下SS走線為:
(16U4在接收到來自ASA BUS的SS訊號拉低後進入中斷,此時判讀ASA BUS上的`ASAID`是否與此板的`ASAID`相同,若相同才會將SS輸出至主控晶片)
:::warning
如上一小節所述,ASA BUS漸漸沒在使用。此設計所產生的delay是否會造成問題尚未驗證!
:::

#### 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**。
於是有了以下候選者:

>**SERCOM**為此晶片特有的周邊硬體,他能在各種串列通訊模式間進行切換。
**TC、TCC**基本上同樣為Timer/Counter硬體,可為一般Timer使用,也可PWM使用。而**TCC**與**TC**不同之處為:**TCC**相較為**TC**有更高的精確度與自由度,規格書上**TCC**的全名為<Timer/Counter for motor Contor>。
以下為40 PIN I/O Port成品

:::warning
跟ASA BUS設計不同,40 PIN I/O Port處不考慮與實驗室開發版相容問題,因此這塊不連接level shifter,使用者請注意小心。
:::
## 其他區塊介紹
### Ether
> 從M3開始發展(?
> 在大神carry出這個模組後一直被放置至今,M4版本也只是預先開好硬體空間,韌體還沒開發,走線沒測試過是否會有問題,待後人測試繼續改進。


### Clock
> 請參考[MCU主控板基本電路](https://hackmd.io/8CfD7A1cTvm9Xl9kPnAM3w),或稱最小系統。
> ARM系列通常可以掛載兩個高速clock及一個低速clock,M4開發版為考量40PIN I/O完整性,只掛了一個高速clock。