MTK用UART1输出log信息

来源:互联网 发布:淘宝企业店铺的条件 编辑:程序博客网 时间:2024/06/06 01:54
第一步:环境搭建
学过51的知道用keil,学过linux都知道arm-linux-gcc,类似的,学mtk用的是RVCT与ADS,至于RVCT与ADS的区别,http://blog.csdn.net/nwpu053883/article/details/6623609,安装教程请看https://wenku.baidu.com/view/b53e4dcda76e58fafbb0039c.html,至于要装perl,是因为编译时,用到了perl语言,要装office2007,因为要用到excel,目前发现了内存配置是excel格式的,这样做的原因是MTK提供了相应型号的配置,避免用户自行配置出差错。
编译:
形式:make [custom=ProjectName]<project><action>["modules"]
查看工程~buildinfo.tmp文件,就知道custom与project了,action就是编译选项,通常用到的有new、update、remake等,modules【模块名称】在\工程目录\make\ 下面的文件夹名称【本人只学过MT2502,其它不知道】
1、修改配置文件(.mak文件或者用DrvGen.exe修改硬件配置),需要make new,make new不用加模块名,编译的是整个工程,(个人的custom:)如下
make CORETEK02C_WT_11C GPRS new
2、改动的是模块里的c文件
make CORETEK02C_WT_11C gprs remake 模块名
3、改动的是模块里的c与h文件
make CORETEK02C_WT_11C gprs update
将生成的文件,用FlashTool或者MultiPortFlashDownloadProject烧录到板子,就能跑起来了MultiPortFlash是批量烧录的工具
第二步:
调试驱动模块前,要做的就是将log输出到终端PC机上。本人拿到的源码,是可以从USB里打印log信息,但是MT2502的USB并不单单用来打印log,还作为代码烧录、内存映射成U盘,有时候还会因为其它原因,导致这个USB不能检测到,这时候用USB抓log简直痛苦死了。经一牛网大神指点,可以用UART作为串口输出,这样就可以解决问题了,可能参考http://blog.163.com/fish_eleven%40126/blog/static/2377269201321111735949/
虽然网络上都说经常会修改配置文件 (.mak),但这个效率有点底,每修改一次,都要make new一次,这样对于一些编译慢的机子,或者修改的地方不只一个时,这时很浪费时间。经过一些LINUX开发者的指点,直接修改c与h文件,也是可以的,这样就可以用模块编译。顺便一提,bootloader的UART有log,并不代表在kernel里面就有log,因为在kernel里面会重新初始化,而bootloader里面默认用的是UART1作为输出log的端口。
关于kernel中的UART的配置,在nvram_data_itEMS.c下的NVRAM_EF_PORT_SETTING_DEFAULT[]结构体,成员如下:
typedef struct
{
kal_uint16 tst_port_ps;
kal_uint16 ps_port;
UART_baudrate tst_baudrate_ps;
UART_baudrate ps_baudrate;
kal_bool High_Speed_SIM_Enabled;
kal_uint8 swdbg;
kal_uint8 uart_power_setting; /* For DCM, Start [Set UART POWER], CTI */
kal_uint8 cti_uart_port;
UART_baudrate cti_baudrate;
kal_uint8 tst_port_l1;
UART_baudrate tst_baudrate_l1;
kal_uint8 tst_output_mode;
kal_uint8 usb_logging_mode;
kal_uint16 tst_port_DSP;
UART_baudrate tst_baud_rate_dsp;
kal_uint8 usb_cdROM_config;
} port_setting_struct;

TST-PS与TST_LI都可以用catcher抓log,下面的端口与波特率,修改后,在catcher工具的配置上,也要设置成一样的,PS与L1的端口其实可以不一样,如果设置成不一样,那么在catcher上要将PS与LI都配置一下它们的端口以及波特率。
tst_port_ps:0、1、2代表UART1,UART2,UART3,catcher抓log配置
ps_port:用于PC机与板子的命令通信,这里与上面分开,是因为log有很多,而指令是发送与响应,方便看指令而已。
tst_baudrate_ps:TST的波特率,当设置比较高的波特特率时,一定要检查硬件是否支持那么高的串口通讯,要不然可能会收到乱码
ps_baudrate:同上
High_Speed_SIM_Enabled:
swdbg:
uart_power_setting:
cti_uart_port:
cti_baudrate:
tst_port_l1:
tst_baudrate_l1:
tst_output_mode:
usb_logging_mode:
tst_port_dsp:
tst_baud_rate_dsp:
usb_cdrom_config:
我想用的是UART1输出,配置如下:
{
0,
1,
460800,
460800,
KAL_FALSE,
0,
3,
99,
0,
0,
460800,
0,
0,
99,
0,
0
},
至于这些参数,与硬件寄存器如何对应上,还真的是不知道,开发摸索一个月了,还是没有找到硬件寄存器的手册。、
这时,可以用串串口输出信息,虽然将波特率调成了460800,但是串口输出老是显示buffer full,原因可能是串口输出太多,暂时没有好的方法解决,波特率也不能再往上调了。