精华内容
下载资源
问答
  • MTK串口驱动开发

    2018-10-31 11:54:05
    MTK串口驱动开发 由于最近在工作中需要使用MTK的MT6261进行移动嵌入式设备的开发,所以将MTK串口驱动开发流程贴出来分享给大家。 1.使用串口工具配置UART管脚,此处配置的是UART2打开源码目录下的\custom\drv\Drv_...

    MTK串口驱动开发

    由于最近在工作中需要使用MTK的MT6261进行移动嵌入式设备的开发,所以将MTK串口驱动开发流程贴出来分享给大家。

    1.使用串口工具配置UART管脚,此处配置的是UART2打开源码目录下的\custom\drv\Drv_Tool\DrvGen.exe

    DrvGen双击打开
    打开硬件定制文件点击Open ,打开\custom\codegen\MBLTEK61D_MOS_3232_11C_BB\codegen.dws的定制文件。点击Edit,配置UART2管脚。
    UART2完成后点击确定,并点击Save,再点击Gen Code生成硬件定制信息,生成的文件在codegen.dws的同级目录下。生成配置文件之后,使用 make c,u custom peripheral指令生成新的硬件配置关系。

    2.串口代码

    static DCL_HANDLE g_handle = 0;
    //0 成功 -1 失败
    kal_int32 m_uart_open(kal_uint32 port)
    {
    	DCL_HANDLE handle = 0;
    	handle = DclSerPort_Open(port,(module_type)MOD_UART1_HISR+port);
    
    	if(handle)
    	{
    		g_handle = handle;
    		return 0;
    	}
    	else
    	{
    		g_handle = 0;
    		return -1;
    	}
    }
    
    void m_uart_close(kal_uint32 port)
    {
    	DclSerPort_Close(g_handle);
    	g_handle = 0;
    }
    
    
    void m_uart_config(kal_uint32 port,UARTDCBStruct * UART_Config)
    {  
    	UART_CTRL_DCB_T data;
    
    	if(0 == g_handle)	
    	{
    		return;
    	}
    	
        /* config the UART */
    	data.u4OwenrId = (module_type)MOD_UART1_HISR+port;
    	data.rUARTConfig.u4Baud = UART_Config->baud;
    	data.rUARTConfig.u1DataBits = UART_Config->dataBits;
    	data.rUARTConfig.u1StopBits = UART_Config->stopBits;
    	data.rUARTConfig.u1Parity = UART_Config->parity;
    	data.rUARTConfig.u1FlowControl = UART_Config->flowControl;
    	data.rUARTConfig.ucXonChar = UART_Config->xonChar;
    	data.rUARTConfig.ucXoffChar = UART_Config->xoffChar;
    	data.rUARTConfig.fgDSRCheck = UART_Config->DSRCheck;
    
        /* open the UART port, then setup the config information. */
    	DclSerialPort_Control(g_handle, SIO_CMD_SET_DCB_CONFIG,
                               (DCL_CTRL_DATA_T*)&data);
    }
    
    
    kal_int32 m_uart_sendbytes(kal_uint32 port,kal_uint8* pSendBuff,kal_uint16 len)
    {
    	kal_uint32	writelen = 0;
    	UART_CTRL_CLR_BUFFER_T data_clr_buf = {0};
    	UART_CTRL_PURGE_T data_purge_buf = {0};
    	UART_CTRL_POWERON_T	data_power_on = {0};
    	
    	if(0 == g_handle)	
    	{
    		return -1;
    	}
    
    	data_power_on.bFlag_Poweron = KAL_TRUE;
    	DclSerialPort_Control(g_handle, UART_CMD_POWER_ON,(DCL_CTRL_DATA_T*)&data_power_on);
    
    	data_purge_buf.u4OwenrId = (module_type)MOD_UART1_HISR+port;
    	data_purge_buf.dir = DCL_RX_BUF;
    	DclSerialPort_Control(g_handle, SIO_CMD_PURGE,(DCL_CTRL_DATA_T*)&data_purge_buf);
    	data_purge_buf.dir = DCL_TX_BUF;
    	DclSerialPort_Control(g_handle, SIO_CMD_CLR_RX_BUF,(DCL_CTRL_DATA_T*)&data_purge_buf);
    
    	data_clr_buf.u4OwenrId = (module_type)MOD_UART1_HISR+port;
    	DclSerialPort_Control(g_handle, SIO_CMD_CLR_RX_BUF,(DCL_CTRL_DATA_T*)&data_clr_buf);
    	DclSerialPort_Control(g_handle, SIO_CMD_CLR_RX_BUF,(DCL_CTRL_DATA_T*)&data_clr_buf);
    
    	
    	return (s32)DclSerPort_WriteData(g_handle,pSendBuff,len,&writelen,(module_type)MOD_UART1_HISR+port);
    }
    
    kal_int32 m_uart_readbytes(kal_uint32 port,kal_uint8* pRecvBuff,kal_uint16 len,kal_uint32* readlen,kal_uint32 timeout)
    {  
    	kal_uint32	read_count_len = 0;
    	kal_uint32	read_sum_len = 0;
    	DCL_STATUS status;
    	kal_uint32 timestart = 0;
    	kal_uint32 timecurrent = 0;
    	kal_uint32 tickcurrent = 0;
    	UART_CTRL_POWERON_T	data_power_on = {0};
    	
    	if(0 == g_handle)	
    	{
    		return -1;
    	}
    
    	data_power_on.bFlag_Poweron = KAL_TRUE;
    	DclSerialPort_Control(g_handle, UART_CMD_POWER_ON,(DCL_CTRL_DATA_T*)&data_power_on);
    
    	kal_get_time(&tickcurrent);
    	timestart = kal_ticks_to_milli_secs(tickcurrent);
    
    	while(1)
    	{
    		read_count_len = 0;
    		status = DclSerPort_ReadData(g_handle,pRecvBuff + read_sum_len,len - read_sum_len,&read_count_len,(module_type)MOD_UART1_HISR+port);
    		if(STATUS_OK != status)
    		{
    			//出现错误 直接返回退出
    			break;
    		}
    		if(readlen)
    		{
    			read_sum_len += read_count_len;
    		}
    		if(read_sum_len >= len)
    		{
    			*readlen = read_sum_len;
    			break;
    		}
    
    		kal_get_time(&tickcurrent);
    		timecurrent = kal_ticks_to_milli_secs(tickcurrent);
    		if((timecurrent - timestart)>= timeout)
    		{	
    			*readlen = read_sum_len;
    			break;
    		}	
    			
    	}	
    
    
    	return status;
    	
    }
    

    3.串口代码分析

    1.串口的指令通过结构体指针最终走到Uart_Handler进行处理流程如下
    

    INDEX结构体指针
    此结构体指针指向Uart_handle中的结构体
    根据配置方式

    INDEX通过UART_Handler来调用底层函数
    INDEXINDEXINDEXUART_Driver结构体
    至此,串口流程梳理完毕。

    3.remark

    第一次调用DCL_xx函数的时候程序会异常死机,最后查到原因是我的MTK源码中的				  
    

    DCL_STATUS DclSerPort_ReadData(DCL_HANDLE handle, DCL_BUFF *buff, DCL_BUFF_LEN buf_len, DCL_BUFF_LEN *returned_len, DCL_OPTIONS options)
    {

    UART_CTRL_GET_BYTES_T data;
     DCL_STATUS status;
    data.u4OwenrId =(module_type)options;
    data.u2Length = buf_len;
    data.puBuffaddr = buff;
    data.pustatus = NULL;	//此语句缺失导致系统重启
    status = 	DclSerialPort_Control(handle,SIO_CMD_GET_BYTES, (DCL_CTRL_DATA_T*)&data);
    *returned_len = data.u2RetSize;
    

    return status;
    }

    4.欢迎各位补充干货分享

    展开全文
  • MTK串口下载线电路图

    2008-06-30 09:54:31
    MTK串口下载线电路图....................
  • 1. 对串口的设置: 1) uart.c 中UART_HWInit 完成对各串口的波特率、数据位等之类初始化设置。默认为115200。若需调整波特率则可在此处设置。也可调用U_SetBaudRate进行设置。 2) trace口的波特率设置如下在NVRAM_...

    1.      对串口的设置:

    1)      uart.c 中UART_HWInit 完成对各串口的波特率、数据位等之类初始化设置。默认为115200。若需调整波特率则可在此处设置。也可调用U_SetBaudRate进行设置。

    2)      trace口的波特率设置如下在NVRAM_EF_PORT_SETTING_DEFAULT。

    2.      串口的切换:

    1)  trace口的切换:

    nvram_common_config.c 中

    static kal_uint8 const NVRAM_EF_PORT_SETTING_DEFAULT[] =

    {

    #if defined(__ONLY_ONE_UART__)

    0x63, 0x00,  /* TST uses uart_port2(value is 1) */

    0x00, 0x00,  /* APP uses uart_port1 */

    #else

    0x00, 0x00,  /* TST uses uart_port2(value is 1) */表示哪个串口作输出 Trace口,              0x01, 0x00,  /* APP uses uart_port1 */表示哪个串口用于AT。

    #endif

    /*设置为 0x00则表示串口1设置为 Trace模式, 0x01表示串口2设置为Trace , 0x63表示不用Trace*/

    #if defined(EMPTY_MMI)

    0x00, 0x10, 0x0E, 0x00, /* tst default baud rate base = 921600 = 0x000E1000 */

    #else

    0x00, 0xC2, 0x01, 0x00, /* tst default baud rate base = 115200 = 0x0001C200 */

    #endif

    设置trace串口的波特率

    #if defined (__GPRS_MODE__)

    0x00, 0xC2, 0x01, 0x00, /* ps default baud rate base = 115200 = 0x0001C200 */

    #else

    0x00, 0xE1, 0x00, 0x00, /* ps default baud rate base =  57600 = 0x0000E100 */

    #endif

    设置at串口的波特率

    0x00,                          /* High SpeedSIM */

    0x00,                          /* SWDBG */

    0x03, 0x63,                    /* uart power setting, plus  1-byte padding */

    0x00, 0x00,0x00, 0x00          /* CTI baud rate */

    };

    0x03 -- 串口1、2  powner on

    0x07-- 串口1、2 、3 powner on

    这些设置也可在暗码“*#3646633#”中设置。

    2)  AT与普通串口的切换:

    串口默认是为AT模式,默认都是被L4层控制的。

    在初始化或使用串口前时设置UART_SetOwner(uart_port2,MOD_CUSTOM2);

    即可将串口的at模式切换为普通串口。UART_SetOwner作用:相当于将串口同任务(task)绑定。 串口的收发处理均有此任务实现。

    有数据来时,底层会发送MSG_ID_UART_READY_TO_READ_IND消息上来。用UART_GetBytes来读取串口接到的数据。用UART_PutBytes来发送数据。

    3.      在plutommi里新添加文件,须在custom里调用。

    1)  在make\plutommi里的

    plutommi.inc 添加 头文件所在的目录

    plutommi.pth 添加 源文件所在的目录

    plutommi.lis  添加源文件的路径。

    2)  D16_GPRS.mak 添加

    CUSTOM_COMMINC  +=  plutommi\mmi\StarComm\Zigbee\ZigbeeInc

    此处未添加,则在custom1_create.c里无法调用头文件,提示wouldn’t open *.h错误

    4.        模块的休眠模式

    在makefile文件里,如D16_GPRS.mak.

    mtk_SLEEP_ENABLE  =  FALSE      # Sleep Mode Support

    置MTK_SLEEP_ENABLE为FALSE :彻底关闭休眠模式。

    MTK_SLEEP_ENABLE为TRUE :开启休眠模式的使能。

    代码中调用L1SM_SleepDisable 、L1SM_SleepEnable 对休眠模式进行设置。

    5.      现象:

    串口收发正常,接上zigbee小板后,可监控到模块有往zigbee发的数据,但zigbee没有回应。  但在初次上电的时候,zigbee有回应数据至模块。(在下载模块程序时,zigbee有一直往模块发送数据)。

    解决:

    Zigbee小板上的重启接口被程序置为低电平(in),导致一直被重启。

    MTK串口工具

    http://bbs.16rd.com/forum.php?mod=viewthread&tid=453286&fromuid=28165



    作者:笙箫莫离
    链接:https://www.jianshu.com/p/d60673992abd
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • 山寨机MTK串口驱动

    2015-01-13 10:58:12
    山寨手机的串口驱动程序工具,适用于国产MTK平台下的山寨机的手机驱动
  • MTK 串口屏驱动跟接口

    2012-01-16 17:42:44
    用来调试MTK6253 ,5225 等串口屏的驱动跟接口
  • MTK 串口开关

    千次阅读 2017-01-06 10:46:30
    User版本打开各个阶段uart log(UART log) 1.PRELAODER: default.mk打开  bootloader/preloader/platform/mt6755/default....2、要使用USB转串口的线打串口Log,需打开USB转UART的宏  LK:  文件:rlk6795_lw
    User版本打开各个阶段uart log(UART log)
    
    1.PRELAODER: default.mk打开

     bootloader/preloader/platform/mt6755/default.mak

    CFG_USB_UART_SWITCH :=1
    2、要使用USB转串口的线打串口Log,需打开USB转UART的宏
         LK:
         文件:rlk6795_lwt_m.mk(此文件一般都单拉出来)
         修改点:DEFINES += WITH_DEBUG_UART=1(1=enable)


         kernel:文件ProjectConfig.mk(此文件一般都单拉出来 )
         修改点:MTK_UART_USB_SWITCH = yes(yes = enable)


    3、要想让User版本也输出UART log
         文件:vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
         修改点:
    #ifdef USER_BUILD


     sprintf(cmdline,"%s%s",cmdline," printk.disable_uart=0");    // 需修改此文件所有的disable_uart=1, 1->0, 即可打开uart log
    #else
            sprintf(cmdline,"%s%s",cmdline," printk.disable_uart=0 ddebug_query=\"file *mediatek* +p ; file *gpu* =_\"");
    #endif       

    3、开机到桌面后,手机uart log停止输出?
         文件:kernel-3.18/kernel/printk/printk.c
         修改点:
     void mt_disable

    _uart(void)
     {
            if (mt_need_uart_console == 0)
    -               printk_disable_uart = 1;
    +               printk_disable_uart = 0;
     }

    展开全文
  • 平台:mt6582 + android 4.4mtk通过串口连接机器读取uart log信息,但是在系统启动完成之后在uart log中会出现这样的信息:<< printk console disable >>通过搜索在kernel/kernel/printk.c中的mt_...

    平台:mt6582 + android 4.4

    mtk通过串口连接机器读取uart log信息,但是在系统启动完成之后在uart log中会出现这样的信息:

    << printk console disable >>

    通过搜索在kernel/kernel/printk.c中的mt_disable_uart函数打印出来的。

    #ifdef CONFIG_MT_PRINTK_UART_CONSOLE

    extern int mt_need_uart_console;

    inline void mt_disable_uart()

    {

    if(mt_need_uart_console == 0){

    printk("<< printk console disable >>\n");

    printk_disable_uart = 1;

    }else{

    printk("<< printk console can't be disabled >>\n");

    }

    }

    inline void mt_enable_uart()

    {

    if(mt_need_uart_console == 1){

    if(printk_disable_uart == 0)

    return;

    printk_disable_uart = 0;

    printk("<< printk console enable >>\n");

    }else{

    printk("<< printk console can't be enabled >>\n");

    }

    }

    #endif通过上面代码猜测如果要取消disable uart功能,即在系统启动完成之后也要能够看到uart log信息,需要取消CONFIG_MT_PRINTK_UART_CONSOLE配置,然后继续搜索,在mediatek/config/mt6582/autoconfig/kconfig/platform中找到了这个配置,但是这个文件在开始处就说明了是自动生成的,那么我们在修改这个文件时也最好自动生成它,而不是强制修改它。

    根据以往的经验,platform这个文件应该是make menuconfig生成的.config文件,所以将这个文件放到kernel目录下,并重命名为.config,然后运行make menuconfig命令,但是会提示TARGET_PRODUCT/PROJECT is not set这样的错误,指定project,输入命令make TARGET_PRODUCT=hexing82_cwet_kk menuconfig,然后做如下的配置:

    [*] MediaTek Properitary Configuration  --->

    Kernel Configurations  --->

    [ ] MTK printk UART controller

    然后在编译的时候有可能会编译错误,会提示需要输入make mrproper命令,还是在kernel目录下输入命令make TARGET_PRODUCT=hexing82_cwet_kk mrproper,重新编译即可。

    展开全文
  • mtk 串口读取uart log

    2019-07-11 20:06:44
    mtk通过串口连接机器读取uart log信息,但是在系统启动完成之后在uart log中会出现这样的信息: << printk console disable >> 通过搜索在kernel/kernel/printk.c中的mt_disable_uart函数打印出来的。 ...
  • MTK串口配置及流程

    千次阅读 2016-04-28 14:51:58
    端口配置static port_setting_struct const NVRAM_EF_PORT_SETTING_DEFAULT[]= { { /* USB转虚拟串口 */ 99, 4, /* uart_port_usb */ /* 串口输出 */ 99, /* tst-ps uses ua
  • MTK串口的使用

    千次阅读 2017-06-16 11:46:51
    软件准备。 1. vendor\mediatek\proprietary\bootable\bootloader\preloader\custom\gnsz6757_...1.串口号插入串口之后再设备管理器中查,在填入serial line to connect to 2.speed 波特率:填921600
  • MTK串口通信调试

    2017-01-09 17:00:38
    时总是不停地打印0x11 0x13,且向uart1发送0x11、0x13时,串口也收不到该数据,这是串口配置时的流控造成的,解决发法是:在uart.c中的函数void U_SetDCBConfig()中将对串口uart的流控配置去掉就可以了(代码2226...
  • windows 上可以用来抓uart log工具,真实可靠。特别强调的是支持921600 波特率
  • mtk串口打印设置

    2014-08-01 14:43:03
    custom\star89_s188\preloader\inc\Cust_bldr.h
  • MTK串口简单流程整理

    千次阅读 2014-07-14 09:40:16
    MT6276平台接到任务要做一个虚拟AT,软件模拟串口发送AT指令并获取返回的内容,简单整理一下流程 UART1_HISR //根据IIR类型判断tx or rx //UART_IIR_CTI UART1_HISR->UART_RecHandler(&UARTPort...
  • MTK串口驱动测试方法

    千次阅读 2016-04-11 09:44:27
    下面的例子是基于Andrioid源码中自带的一个串口应用SerialChat,Android已经把与之相关的Freamwork、JNI代码,其中直接在JNI中调用了Linux的系统调用,没有遵循Android的HAL架构,根本就没有提供HAL。 下面是相关的...
  • MTK串口发送问题

    2012-07-30 16:42:18
    我想做个与 MTK 手机进行串口通讯的小工具,现在接收正常,发送没反应。 初始化: DWORD style=WS_VISIBLE; if(m_MSComm.GetPortOpen()) //如果串口是打开的,则行关闭串口 { m_MSComm.SetPortOpen...
  • MTK串口打印乱码JB版本

    千次阅读 2017-05-03 09:21:18
     2,确认您的串口线的电平信号是1.8V还是2.8V,MTK平台是1.8V的。  3,请更换串口线和PC,试下是否OK。 【问题原因】  串口先电平信号不匹配导致的,请使用1.8v电平信号的串口线。 [FAQ06615]...
  • MTK 串口驱动 PART-2

    千次阅读 2010-05-24 14:10:00
    /****************************************************************************** Copyright Statement:* --------------------* This software is protected by Copyright and the information contained* h
  • MTK 串口驱动 PART-1

    千次阅读 2010-05-24 14:09:00
    /****************************************************************************** Copyright Statement:* --------------------* This software is protected by Copyright and the information contained* h
  • MTK 串口驱动 PART-3

    千次阅读 2010-05-24 14:13:00
    /****************************************************************************** Copyright Statement:* --------------------* This software is protected by Copyright and the information contained* h
  • 打开GPS的同时也唤醒了串口,但关闭GPS的同时也关闭串口,发现GPS关闭了,而串口却没有关掉,感觉关串口的代码也没有问题啊,不知道是怎么回事....!!求大牛解惑!!!!! [color=#800000]初始化串口代码如下:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,628
精华内容 651
关键字:

mtk串口