CH347的spi接口中cs與sck間時間過長問題

用示波器觀察spi的cs和sck,發(fā)現(xiàn)cs下降沿到sck第一個下降沿間的時間約有50us,

嘗試修改過時鐘速率(60M/30M/15M等),CS0或者CS1、ActiveCS RW delay、Deactive CS RW delay都沒有直接影響 ,

這個50us的時間間隙對傳輸速率影響較大,想確定一下是芯片本身就是如何還是說在使用CH347T上位機Demo軟件設(shè)置的問題?

您好,如上間隔時間為通過單獨的片選函數(shù)手動拉片選產(chǎn)生的延遲時間,芯片同時支持硬件SPI自動拉片選的操作。使用硬件SPI控制片選時間精度可控制在5us以內(nèi)。



假設(shè)當前spi時鐘為60MHz,以傳輸512Byte為例,其傳輸時間約為65us,而這個cs跟sck的間隔都有50us,

即512Byte實際使用了至少 115us,這使得實際有效傳輸效率降低了幾乎一半呀~~~~


對此,該有什么辦法可以提高傳輸效率嗎?

1、增大傳輸包數(shù)量?

2、不使用CS?

3、SPI轉(zhuǎn)usb的極限最大傳輸速率(理想情況下),有測過嗎?


謝謝


您好,如上信息已更正,參見#2,使用硬件SPI接口訪問可以達到較高的效率,如下所示:

image.png


你說的“通過單獨的片選函數(shù)手動拉片選產(chǎn)生的延遲時間”是指用CH347SPI_SetChipSelect函數(shù)嗎?

在demo工程里其僅僅在CH347DLL.H有定義,但實際并沒有調(diào)用過該函數(shù)哦。

上述測出的50us是直接用CH347Demo.exe測出的哦,是哪里配置錯了嗎?

微信截圖_20240311194058.png


新建文件0.jpg? 藍色CS?黃色SCK,?不但前面有約50us時間間隔,后面還有約80us的時間間隔。


您好,可以添加我們技術(shù)支持微信,協(xié)助您看下代碼上的使用問題。方式已私信。


你好,我也碰到一模一樣的問題,沁恒官方能不能給個方案公布出來。不要老是解決方案說到一半,藏著掖著。有意義嗎。。。

產(chǎn)品用的好,大家會多使用的。。。。



TECH39

您好,如上間隔時間為通過單獨的片選函數(shù)手動拉片選產(chǎn)生的延遲時間,芯片同時支持硬件SPI自動拉片選的操作。使用硬件SPI控制片選時間精度可控制在5us以內(nèi)。



無法解決嗎?是這樣的,read的延遲很久,但是write卻很快


CH347T/F 的SPI片選機制支持芯片自己控制片選以及上位機單獨控制片選,兩種方式。

如測試中遇到收發(fā)速率不夠快,應(yīng)該是因為使用的API函數(shù)使用了上位機片選的控制方式。您可使用接口函數(shù):CH347SPI_WriteRead?

,參數(shù)?ignoreCS?設(shè)置為false,在SPI模式0下看下速度。正常如:30MHz時鐘,正??梢赃_到2.5MB↑。

注:CH347SPI_WriteRead? 因底層會采用自動片選控制方式,其收發(fā)效率最優(yōu)。范例:

注:以下 SPI 設(shè)置 Clock 時鐘為 30MHz,MOSI 和 MISO 短接回環(huán)測速。

bool CH347_SPI_Init()

{

? ? bool ret;

? ? mSpiCfgS SpiCfg = { 0 };


? ? /* set spi interface in [mode3] & [30MHz] & [MSB] & output [0xFF] by default */

? ? SpiCfg.iMode = 0x03;

? ? SpiCfg.iByteOrder = 1;

? ? SpiCfg.iSpiOutDefaultData = 0xFF;

? ? SpiCfg.iChipSelect = 0x80;

? ? CH347SPI_SetFrequency(ch347device.fd, 30e6);


? ? /* set spi to 16bits transfer */

? ? CH347SPI_SetDataBits(ch347device.fd, 0);


? ? /* init spi interface */

? ? ret = CH347SPI_Init(ch347device.fd, &SpiCfg);

? ? if (!ret) {

? ? ? ? printf("Failed to init SPI interface.\n");

? ? ? ? return false;

? ? } else {

? ? ? ? printf("SPI Init ok.\n");

? ? }


? ? return true;

}





void ch347_spi__pressure_test()

{

? ? bool ret = false;

? ? int len;

? ? int i;

? ? uint8_t tBuffer[0x1000] = { 0 };

? ? uint8_t rBuffer[0x1000] = { 0 };

? ? int count = 0;


? ? ret = CH347_SPI_Init();

? ? if (ret == false) {

? ? ? ? printf("Failed to init CH347 SPI interface.\n");

? ? ? ? return;

? ? }

? ? printf("CH347 SPI interface init succeed.\n");


retry:

? ? len = 4000;


? ? ret = CH347SPI_WriteRead(ch347device.fd, false, 0x80, len, rBuffer);

? ? if (ret == false) {

? ? ? ? printf("Failed to CH347SPI_WriteRead.\n");

? ? ? ? return;

? ? }

? ? // 以下判斷為 SPI Loopback 模式下,SPI發(fā)送數(shù)據(jù)接收回來進行比對。

? ? if (memcmp(tBuffer, rBuffer, len)) {

? ? ? ? printf("SPI data comare error!!! (len = %d)\n\n", len);


? ? ? ? printf("TX data:\n");

? ? ? ? for (i = 0; i < len; i++) {

? ? ? ? ? ? printf("0x%2x ", tBuffer[i]);

? ? ? ? }

? ? ? ? printf("\n");


? ? ? ? printf("RX data:\n");

? ? ? ? for (i = 0; i < len; i++) {

? ? ? ? ? ? printf("0x%2x ", rBuffer[i]);

? ? ? ? }

? ? ? ? printf("\n");

? ? ? ? return;

? ? } else {

? ? ? ? printf("spi loopback ok (len = %d), count: %d\n", len, count);

? ? ? ? g_bytes_read += len;

? ? }





只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频