Procházet zdrojové kódy

change: sdk,提交了一下历史代码

Wendal Chen před 2 měsíci
rodič
revize
63312dd9b6

+ 0 - 1
app/main.c

@@ -17,7 +17,6 @@
 #include "luat_msgbus.h"
 #include "luat_pm.h"
 #include "luat_rtc.h"
-#include "luat_pcap.h"
 #include "luat_uart.h"
 #include "luat_malloc.h"
 

+ 3 - 2
app/network/luat_zlink_wlan.c

@@ -50,7 +50,7 @@
 #include "luat_spi.h"
 #include "luat_malloc.h"
 #include "luat_uart.h"
-
+#if 0
 #include "luat_zlink.h"
 #include "crc.h"
 
@@ -125,7 +125,7 @@ static s16 uart_input_cb(u16 len, void* userdata) {
     //     buff_offset = 0;
     // }
     len = luat_uart_read(1, uart_buff + buff_offset, BUFF_SIZE - buff_offset);
-    if (len < 0) {
+    if (len & 0x8000) {
         printf("luat_uart_read %d\n", len);
         return 0;
     }
@@ -189,3 +189,4 @@ void luat_zlink_wlan_init(void) {
     tls_wifi_status_change_cb_register(zlink_wifi_status_change);
     tls_ethernet_data_rx_callback(zlink_net_rx_data_cb);
 }
+#endif

+ 0 - 3
app/port/luat_base_air101.c

@@ -284,9 +284,6 @@ static const luaL_Reg loadedlibs[] = {
 #ifdef LUAT_USE_FOTA
   {"fota", luaopen_fota},
 #endif
-#ifdef LUAT_USE_SPI_SLAVE
-  {"spislave", luaopen_spislave},
-#endif
 #ifdef LUAT_USE_HT1621
   {"ht1621", luaopen_ht1621},
 #endif

binární
lib/libwmarch.a


+ 2 - 2
platform/drivers/dma/wm_dma.c

@@ -347,7 +347,7 @@ unsigned char tls_dma_request(unsigned char ch, unsigned char flags)
  	int i = 0;
 
 	/*If channel is valid, try to use specified DMA channel!*/
-	if ((ch >= 0) && (ch < 8))
+	if (ch < 8)
 	{
 		if (!(channels.channels[ch] & TLS_DMA_FLAGS_CHANNEL_VALID))
 		{
@@ -373,7 +373,7 @@ unsigned char tls_dma_request(unsigned char ch, unsigned char flags)
 		}
 	}
 
-	if ((freeCh >= 0) && (freeCh < 8))
+	if (freeCh < 8)
 	{
 		if (dma_used_bit == 0)
 		{

+ 99 - 11
platform/drivers/sdio_host/wm_sdio_host.c

@@ -3,6 +3,10 @@
 #include "wm_mem.h"
 #include "wm_dma.h"
 #include "wm_cpu.h"
+#include "stdio.h"
+#include "string.h"
+#include "wm_gpio_afsel.h"
+#include "wm_pmu.h"
 
 #define TEST_DEBUG_EN           0
 #if TEST_DEBUG_EN
@@ -143,10 +147,10 @@ begin:
 
 		wm_sdh_send_cmd(41, 0xC0100000, 0xC4); //Send ACMD41
 		sm_sdh_wait_interrupt(0, -1);
-		sm_sdh_wait_interrupt(3, 1000); //由于sd规范中,Acmd41返回的crc永远是11111,也就是应该忽略crc;这里的crc错误应该忽略。
+		sm_sdh_wait_interrupt(3, 1000); //鐢变簬sd瑙勮寖涓�紝Acmd41杩斿洖鐨刢rc姘歌繙鏄�11111锛屼篃灏辨槸搴旇�蹇界暐crc;杩欓噷鐨刢rc閿欒�搴旇�蹇界暐銆�
 		wm_sdh_get_response(respCmd, 2);
 		sh_dumpBuffer("ACMD41 respCmd", (char *)respCmd, 5);
-		if((respCmd[1] & 0xFF) != 0x3F) //sd规范定义固定为0x3F,所以导致crc错误
+		if((respCmd[1] & 0xFF) != 0x3F) //sd瑙勮寖瀹氫箟鍥哄畾涓�0x3F,鎵€浠ュ�鑷碿rc閿欒�
 			goto end;
 		if(respCmd[0] >> 31 & 0x1)
 		{
@@ -160,7 +164,7 @@ begin:
 	sm_sdh_wait_interrupt(3, 1000);
 	wm_sdh_get_response(respCmd, 4);
 	sh_dumpBuffer("CMD2 respCmd", (char *)respCmd, 16);
-	if((respCmd[3] >> 24 & 0xFF) != 0x3F) //sd规范定义固定为0x3F,所以导致crc错误
+	if((respCmd[3] >> 24 & 0xFF) != 0x3F) //sd瑙勮寖瀹氫箟鍥哄畾涓�0x3F,鎵€浠ュ�鑷碿rc閿欒�
 		goto end;
 	wm_sdh_send_cmd(3, 0, 0xC4); //Send CMD3
 	sm_sdh_wait_interrupt(0, -1);
@@ -182,7 +186,7 @@ static uint32_t SD_GetCapacity(uint8_t *csd, SD_CardInfo_t *SDCardInfo)
   uint16_t n;
   uint32_t csize; 
 
-  if((csd[0]&0xC0)==0x40)//判断bit126是否为1
+  if((csd[0]&0xC0)==0x40)//鍒ゆ柇bit126鏄�惁涓�1
   { 
 	SDCardInfo->CSDVer = 2;
     csize = csd[9] + ((uint32_t)csd[8] << 8) + ((uint32_t)(csd[7] & 63) << 16) + 1;
@@ -215,7 +219,7 @@ int wm_sd_card_query_csd(uint32_t rca)
 	for(i=0; i<16; i++) adjustResp[15-i] = SDIO_HOST->CMD_BUF[i];
 	SD_GetCapacity((uint8_t*)&adjustResp[1], &SDCardInfo);
 	sh_dumpBuffer("CMD9 respCmd", adjustResp, 16);
-	if((respCmd[3] >> 24 & 0xFF) != 0x3F) //sd规范定义固定为0x3F,所以导致crc错误
+	if((respCmd[3] >> 24 & 0xFF) != 0x3F) //sd瑙勮寖瀹氫箟鍥哄畾涓�0x3F,鎵€浠ュ�鑷碿rc閿欒�
 		goto end;
 	ret = 0;
 end:
@@ -756,14 +760,32 @@ end:
 	return ret;
 }
 
+static int sdio_init;
+
 void sdio_spi_init(u32 fclk){
+	if (sdio_init)
+		return;
+	sdio_init = 1;
+	printf("sdio_spi_init %d\n", fclk);
 	sdio_host_reset();
+
+    tls_io_cfg_set(WM_IO_PB_06, WM_IO_OPTION2);/*CK*/
+    tls_io_cfg_set(WM_IO_PB_07, WM_IO_OPTION2);/*CMD*/
+    // tls_io_cfg_set(WM_IO_PB_08, WM_IO_OPTION2);/*D0*/
+    tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_SDIO_MASTER);
+
+	tls_bitband_write(HR_CLK_RST_CTL, 27, 0);
+ 
+    tls_bitband_write(HR_CLK_RST_CTL, 27, 1);
+    while (tls_bitband_read(HR_CLK_RST_CTL, 27) == 0);
+
+
 	tls_sys_clk sysclk;	
 	tls_sys_clk_get(&sysclk);
 	SDIO_HOST->MMC_CARDSEL = 0xC0 | (sysclk.cpuclk / 2 - 1);
-	uint8_t ti= sysclk.cpuclk / 2 / fclk;
-	SDIO_HOST->MMC_CTL = 0x542 | (ti << 3);
-	SDIO_HOST->MMC_CTL = 0x542;
+	// SDIO_HOST->MMC_CTL = 0xD3;//0x542;
+	// SDIO_HOST->MMC_CTL = 0xD3;//0x542;
+	SDIO_HOST->MMC_CTL = 0x502;//0x542;
 	SDIO_HOST->MMC_INT_MASK = 0x100; // unmask sdio data interrupt.
 	SDIO_HOST->MMC_CRCCTL = 0x00; 
 	SDIO_HOST->MMC_TIMEOUTCNT = 0;
@@ -774,7 +796,72 @@ int sdio_spi_send(const u8 * buf, u32 len){
     if ((buf == NULL) || (len == 0)){
         return -1;
     }
-    if (len < 4) {          // 直接传输,这样做的原因是DMA不能连续传输少于4个字节的数据
+	// printf("sdio鍙戦€佹暟鎹� %p %d\n", buf, len);
+	u32 tmp;
+	size_t send_size = 0;
+	while (len > 0)
+	{
+		tmp = 0;
+		int t = len / 4;
+		if (t == 0) { // 涓嶅�4涓�瓧鑺備簡
+			send_size = len;
+		}
+		else {
+			send_size = 4;
+		}
+		// else if (t > 0) {
+		// 	send_size = 1 * 4;
+		// }
+		// else {
+			// send_size = t * 4;
+		// }
+		memcpy((u8*)&tmp, buf, send_size);
+		// if (len >= 4) {
+		// 	memcpy(&tmp, buf, 4);
+		// 	send_size = 4;
+		// }
+		// else {
+		// 	// memcpy(&tmp, buf, len);
+		// 	tmp = *buf;
+		// 	send_size = len;
+		// 	// printf("sdio鍙戦€佹暟鎹� %08X %d\n", tmp, send_size);
+		// }
+		// printf("sdio鍙戦€佹暟鎹� %08X %d\n", tmp[0], send_size);
+		// if (send_size < 128) {
+
+		    SDIO_HOST->BUF_CTL = 0x4820;
+            SDIO_HOST->DATA_BUF[0] = tmp;
+            // SDIO_HOST->CMD_BUF[0] = tmp;
+            SDIO_HOST->MMC_BYTECNTL = send_size;
+            SDIO_HOST->MMC_IO = 0x01;
+		    while (1) {
+		    	if ((SDIO_HOST->MMC_IO & 0x01) == 0x00)
+		    		break;
+		    }
+		// }
+		// else {
+		// 	// u32 sendlen,txlen;
+		//     // txlen = len & 0xfffffffc;   // 涓嶅�瀛楃殑鏈€鍚庡崟鐙�彂
+		//     // sendlen = txlen/4;
+		//     SDIO_HOST->BUF_CTL = 0x4000; //disable dma,
+		//     unsigned char sdio_spi_dma_channel = wm_sd_card_dma_config((u32 *) tmp, send_size / 4, 1);
+		//     SDIO_HOST->BUF_CTL = 0xC20; //enable dma, write sd card
+		//     SDIO_HOST->MMC_INT_SRC |= 0x7ff; // clear all firstly
+		//     SDIO_HOST->MMC_BYTECNTL = send_size;
+		//     SDIO_HOST->MMC_IO = 0x01;
+        //     while(1){
+        //         if ((SDIO_HOST->MMC_IO & 0x01) == 0x00)
+        //             break;
+        //     }
+		//     tls_dma_free(sdio_spi_dma_channel);
+		// }
+		len -= send_size;
+		buf += send_size;
+		// printf("done\n");
+	}
+	
+#if 0
+    if (len < 4) {          // 鐩存帴浼犺緭锛岃繖鏍峰仛鐨勫師鍥犳槸DMA涓嶈兘杩炵画浼犺緭灏戜簬4涓�瓧鑺傜殑鏁版嵁
         SDIO_HOST->BUF_CTL = 0x4820;
         SDIO_HOST->DATA_BUF[0] = *((u32 *)buf);
         SDIO_HOST->MMC_BYTECNTL = len;
@@ -783,9 +870,9 @@ int sdio_spi_send(const u8 * buf, u32 len){
 			if ((SDIO_HOST->MMC_IO & 0x01) == 0x00)
 				break;
 		}
-    } else {                   // DMA传输
+    } else {                   // DMA浼犺緭
 		u32 sendlen,txlen;
-		txlen = len & 0xfffffffc;   // 不够字的最后单独发
+		txlen = len & 0xfffffffc;   // 涓嶅�瀛楃殑鏈€鍚庡崟鐙�彂
 		sendlen = txlen/4;
 		SDIO_HOST->BUF_CTL = 0x4000; //disable dma,
 		unsigned char sdio_spi_dma_channel = wm_sd_card_dma_config((u32 *) buf, sendlen, 1);
@@ -809,6 +896,7 @@ int sdio_spi_send(const u8 * buf, u32 len){
 			}
 		}
     }
+#endif
     return 0;
 }
 

+ 5 - 5
src/app/oneshotconfig/wm_oneshot_lsd.c

@@ -51,7 +51,7 @@ u8 lsd_head_bw20[LSD_SRC_CNT] = {0, 0, 0};
 u8 lsd_byte_cnt[LSD_SRC_CNT] = {0, 0, 0};
 u8 lsd_sync_cnt[LSD_SRC_CNT] = {0, 0, 0};
 u8 lsd_src_mac[LSD_SRC_CNT][6] = {{0}, {0}, {0}};
-u8 lsd_data_cnt[LSD_SRC_CNT] = {0, 0, 0};
+u16 lsd_data_cnt[LSD_SRC_CNT] = {0, 0, 0};
 u16 lsd_last_seq[LSD_SRC_CNT] = {0, 0, 0};
 u16 lsd_last_len[LSD_SRC_CNT] = {0, 0, 0};
 u8 lsd_temp_lock[LSD_SRC_CNT] = {0, 0, 0};
@@ -200,7 +200,7 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
 	{
 		return -1;
 	}
-	if(hdr->duration_id == 0)		//normal mode stbc 不处理
+	if(hdr->duration_id == 0)		//normal mode stbc 锟斤拷锟斤拷锟斤拷
 	{
 		tods = 2;
 	}
@@ -309,10 +309,10 @@ int tls_lsd_recv(u8 *buf, u16 data_len)
 				for(i=1; i<=3; i++)
 				{
 					if(guide_len > lsd_head[tods][i])
-						guide_len = lsd_head[tods][i];								//取出同步头中最小值					
+						guide_len = lsd_head[tods][i];								//取锟斤拷同锟斤拷头锟斤拷锟斤拷小值					
 				}
-				lsd_state[tods] = 1;														//同步完成, 锁定源MAC和信道
-				lsd_data_datum[tods] = guide_len - LSD_GUIDE_DATUM + LSD_DATA_OFFSET;		//获取到基准长度
+				lsd_state[tods] = 1;														//同锟斤拷锟斤拷锟�, 锟斤拷锟斤拷源MAC锟斤拷锟脚碉拷
+				lsd_data_datum[tods] = guide_len - LSD_GUIDE_DATUM + LSD_DATA_OFFSET;		//锟斤拷取锟斤拷锟斤拷准锟斤拷锟斤拷
 				if(lsd_printf)
 					lsd_printf("lsd lock:%d\n", lsd_data_datum);	
 				if (lsd_printf)