SJA1105系列芯片内部Memory Mapping
SJA1105/T/P/Q内部的配置分成4個部分,功能分别如下:
ETH_DYN/ETH_STATIC:和數據交換相關的所有配置,包括端口工作模式,端口速率,VLAN,Mirror……等等
CGU:SJA1105内部各端口工作時鐘相關的配置
RGU:軟體復位
ACU:和芯片内部Pad驅動相關的配置
註: 對SJA1105進行配置是Host通過SPI接口對CORE和CGU/ACU部分進行寄存器做寫的操作,未配置的SJA1105無法正常工作。
CGU/ACU部分的配置
這部分的配置詳細寫在SJA1105P/Q/R/S Application Hints ( AH1704)中,客户可以根據各端口的具體工作模式查找到AH1704對應的部分。
SJA1105有5個互相獨立的Port,每一個Port都可以配置工作成MII/RMII/RGMII工作模式中的一種(但SJA1105R/S的Port4只能配置為SGMII),其中MII和RMII又分為MAC mode和PHY mode兩種狀態,RGMII只有一種工作模式,不分MAC/PHY模式。
- CGU/ACU部分的配置--MII模式
MII MAC mode:
這種模式用於SJA1105 的Port配置成MII模式之後去接PHY(比如TJA1100,TJA1102或其他標準乙太網PHY),只要SJA1105 的某個Port配置成MII
mode並接了PHY芯片,肯定是工作在MII MAC mode。
MII PHY mode:
這種模式用於SJA1105的Port配置成MII模式去接MCU/SoC MAC,會使用TX<->RX 交叉的接法,此時TX_CLK和RX_CLK 這兩個25MHz clock均需要由
SJA1105来提供,這就需要把SJA1105的這個Port配置成MII PHY mode。
- CGU/ACU部分的配置–RMII/RGMII/SGMII模式
RMII MAC mode:
這種模式用於SJA1105 的Port配置成RMII模式並輸出50MHz REF_CLK,可以用於接PHY(如TJA1100,TJA1102),也可以用於接MCU/SoC。
RMII PHY mode:
這種模式用於SJA1105的Port配置成RMII模式,但50MHz REF_CLK是由外部輸入,用於接MCU/SoC(須確認MCU/SoC有輸出50MHz REF_CLK的能力)
RGMII mode: 無MAC/PHYmode的區別
SGMII mode: 無MAC/PHYmode的區別
- CGU/ACU部分的配置–AH1704暫存器配置
根據以上確認了各Port的工作模式之後,在AH1704中找到對應的暫存器值進行配置。
例如:SJA1105,Port0工作在MII MAC mode,在AH1704中查到對應的表格
Port2工作在RMII MAC mode, 在AH1704中查到對應的表格,要注意的是,即使只有一個Port用到了RMII-MAC mode, General PLL1 也需要按下圖去寫入。
RGMII相关寄存器配置
SJA1105的RGMII配置中不分MAC mode和PHY mode,只需要確認RGMII實際連接速度。一般來說 , 和SoC或2個Switch連結會用到1Gbps。RGMII支持1G/100M/10M 3種速度等级,使用者可參考AH1704來設定相關暫存器。
配置SJA1105 腳本的Python script - sja1105x_tools :
我們將下載下來的sja1105x_tools解壓縮後,可以看到下面幾個資料夾:
. simple.py - 針對SJA1105做最基本配置
. simpleT.py - 針對SJA1105T做最基本配置
. simplePQRS.py - 針對SJA1105PQRS做最基本配置
. examplePQRS.py - 針對SJA1105PQRS包含交換策略和流量控制的配置
. examplePQRS_TSN.py - 在上面基楚上增加了TSN功能的配置
. converter.py – 將Hex文件轉換成C language的工具
CORE部分的配置程序如下:
Step1: 最基本端口配置 - 端口速率
端口工作模式在py脚本的MII Mode Control Parameters部分,mii_mode_parameters.append從上到下依序是Port0-4,每個端口有配置工作模式(MII/RMII/RGMII/UNUSED/SGMII)以及MAC还是PHY mode。可以根據實際電路連接模式和工作方式來進行對應的配置設定。
Step2:CORE部分的配置文件的生成
完成以上兩個步驟後,SJA1105就可以進行最基本的數據交換功能。
接下來要生成符合CORE部分 數據格式的程式碼:
1.生成Hex檔名:
將修改後的py文件另存為一個檔名(例如Test.py),從原本的 py文件中可以看到執行這個py文件後,會分别產生2個Hex 檔名,一個是針對QS芯片版本,一个是针对PR芯片版本(由於SJA1105配置時會驗證芯片ID,所以這兩個文件中包含的ID是不一樣的)。如下圖,從Test.py文件產生了2個Hex文件分別為Test_SJA1105PR.hex 和Test_SJA1105QS.hex。
2.Hex文件轉換成C Language:
在converter.py的最後一行,去掉前面的註解標示,create_c_code後就會編輯需要轉換的hex檔名和生成的.c 副檔名。執行converter.py 後即可產生對應的C code。
Step3:CORE部分配置加偏移地址操作
完成以上兩個步驟後,SJA1105就可以進行最基本的數據交換功能。
這邊的端口設定包含了完整的Core部分數據,也就是從DeviceID開始的所有數據。再把這些數據放到SPI接口上的時候,需要加上從0x20000開始的偏移地址,如下圖所示:
最後補充需要準備的基本資料:
1.配置SJA1105 腳本的Python script:
sja1105x_tools :
https://www.nxp.com/webapp/Download?colCode=SJA1105X_CONFIG-GENTOOL&appType=license
2.Python環境:
可至www.python.org下載Python環境,目前配置工具支持的Python版本為(>=2.6, <3)
3. Application Hints : AH1704,描述SJA1105P/Q/R/S内部時鐘的具體寄存器配置。
參考來源