天天看點

STM32使用FSMC驅動8080時序CH395的一些問題

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

STM32使用FSMC驅動8080時序CH395的一些問題
STM32使用FSMC驅動8080時序CH395的一些問題

值改小的話讀出的資料會重複 出錯,隻能調大,原因可能是杜邦線的穩定性問題,波形奇醜:

STM32使用FSMC驅動8080時序CH395的一些問題

與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連接配接

繼續閱讀