W800 HSPI使用簡介(2)

發布於 2024-04-12 11:26:14

W800 HSPI實現的是SPI從設備的功能。在寄存器手冊中有如下描述:
“芯片內部的HSPI是和wrapper控制器一起工作的,wrapper控制器內部集成了DMA,通過DMA實現HSPI內部FIFO和芯片內存之間的數據交換。該操作是硬件實現的,軟件不需要關心數據發送接收的過程,只需要配置發送接收數據的鏈表,以及操作wrapper控制器相應的寄存器。”
本文只講述如何配置發送接收數據的鏈表,雖然這些在驅動程序裡已經實現,但是在應用中難免會遇到需要修改情況。
在wm_hspi.h文件裡定義了HSPI BUFFER相關的內容,它是在W800的後面128K內存上取了一塊地址作為緩沖buff,處於HEAP和Wi-Fi內存之間,起始地址定義在wm_ram_config.h裡的SLAVE_HSPI_SDIO_ADDR,大小為SLAVE_HSPI_MAX_SIZE。這塊內存只能定義在後128k ram中。
24.png
20.png

這塊buffer的總大小定義的是0x2000,具體細分在wm_hspi.h裡,按照功能分為下圖所示的幾大區域,我們只關心前面的發送和接收buff。
21.png
HSPI_TXBUF_SIZE、HSPI_RXBUF_SIZE定義了每個buff的大小,這個值不可以修改。HSPI_TXBUF_NUM、HSPI_RXBUF_NUM定義了發送接收buff的個數,這兩個值使我們要修改的地方,按照目前的設置個數,總大小0x2000的內存空間是夠用的,如果這裡改大了個數,那就需要相應的將SLAVE_HSPI_SDIO_ADDR即__heap_end的值向前移動相應的大小,但不能小於0x20028000。每增加一個buff,除了增加的buff本身大小,還需要增加一個desc來描述該buff,發送接收的描述符結構體如下,大小分別為發送描述符28個字節,接收描述符12個字節。
23.png
舉例說明,比如發送buff由2改成了4,接收buff由3改成6,那麼增加的大小為2 x (28 + 1500) + 3 x (12 + 1500) = 7592字節。在ld/w800裡的gcc_csky.ld文件裡修改__ram_end的值,0x2003A000 - 0x1DA8 = 0x20038258。另外需要注意__min_heap_size的值,如果修改了__ram_end的值後編譯沒有報錯,那就沒問題,如果報內存錯誤了,說明分配的堆也要相應地改小,修改__min_heap_size的值 ,0x18000 - 0x1DA8 = 0x16258。
25.png

0 條評論

發布
問題