CH395L是帶并口的版本,支援序列槽、SPI、并口三種模式,網卡類似于内置TCP協定的W5500,使用者隻需讀取一些參數設定socket就可以完成網絡通信。CH395具有并口模式,這是個特色,在對速度要求高的場合,并口比SPI等串行方式快很多,在使用stm32f103以fsmc硬體并口驅動ch395時參考秉火和戰艦的驅動LCD的例程,因為都是8080時序的裝置,方法相似。
在配置過程中,發現在以杜邦線連接配接ch395子產品的情況下,
readWriteTiming.FSMC_AddressSetupTime = 0x03;
readWriteTiming.FSMC_DataSetupTime = 0x08;
這兩個值不能再小于此數值,整個讀寫周期達到 (3+1 +8+1)*1/72MHz = 182ns,沒達到手冊的寫模式極限值41ns
值改小的話讀出的資料會重複 出錯,隻能調大,原因可能是杜邦線的穩定性問題,波形奇醜:
與LCD配置不同的是,需要加上以下:FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
同步等待需要關閉,之前測試失敗是因為讀寫周期不一緻,示波器觀察 寫周期太短,周期與寫不一緻,FSMC_AccessMode_B下,寫周期的參數似乎不受控制,周期過短,切換為FSMC_AccessMode_A ,讀寫分别配置,示波器檢視 讀寫周期一緻,驅動成功。沒有再深入研究,具體配置如下:
readWriteTiming.FSMC_AddressSetupTime = 0x03;
readWriteTiming.FSMC_DataSetupTime = 0x08;
readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;
readWriteTiming.FSMC_AddressHoldTime = 0x00;
readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
readWriteTiming.FSMC_CLKDivision = 0x00;
readWriteTiming.FSMC_DataLatency = 0x00;
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAMx;
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &readWriteTiming;
此外參考ch395官方demo--exam0,移植了stm32平台下序列槽、硬體SPI、模拟并口、硬體FSMC并口的驅動程式,4個Socket分别工作在TCP 用戶端、伺服器、UDP、IPRAW模式。資源下載下傳:
STM32分别以序列槽,硬體SPI,模拟并口驅動CH395,4個socket連接配接
STM32以FSMC硬體并口驅動CH395,4個socket連接配接