修改UBOOT和LINUX调试串口(TI达芬奇芯片--DM6467)

2019-07-27 17:18发布

1.1 概述TI针对DM6467提供的UBOOT和内核默认都是串口0作为调试串口输出的,但现在我需要使用DM6467的UART0的modem功能,所以修改代码,改变调试串口为串口2。需要修改的主要有几部分内容:1. UBL 代码(这部分代码在刚上电的时候,初始化CPU和拷贝UBOOT到DDR,打印信息只有很少,所以不做修改)。2. UBOOT代码。3. linux内核驱动。      使用的代码及版本请参考:http://processors.wiki.ti.com/index.php/DaVinci_PSP_03.01_Beta_(r31)_Release_Notes
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
白丁野老
1楼-- · 2019-07-27 22:15
2.1 修改UBOOT代码
     因为DM6467的串口是符合TL16C550标准的,所以驱动也是使用16550的驱动,默认情况下,我们只需要提供需要配置的串口的基地址和中断号等资源给16550的驱动就可以了,寄存器的配置不需要我们去关心。
    要用起DM6467的串口有几个地方的配置一定要注意:
    1. 引脚复用寄存器(PINMUX0/1);
    2. VDD3P3V_PWDN寄存器,需要使能UART的相关引脚(bit4~bit9置零)
    3.CLKCTL,bit24/25置零。
    在UBOOT里涉及到上面几个寄存器的配置的是在dm6467_evm.c的初始化部分
白丁野老
2楼-- · 2019-07-28 02:40
我的修改如下:
  1. 1 static void davinci_hd_psc_enable ( void )
  2. 2 {
  3. 3     unsigned int alwaysonpdnum = 0;
  4. 4
  5. 5     /* Note this function assumes that the Power Domains are alread on */
  6. 6     REG(PSC_ADDR+0xA00+4*14) |= 0x03; /* EMAC */
  7. 7     REG(PSC_ADDR+0xA00+4*15) |= 0x03; /* VDCE */
  8. 8     REG(PSC_ADDR+0xA00+4*16) |= 0x03; /* Video Port */
  9. 9     REG(PSC_ADDR+0xA00+4*17) |= 0x03; /* Video Port */
  10. 10     REG(PSC_ADDR+0xA00+4*20) |= 0x03; /* DDR2 */
  11. 11     REG(PSC_ADDR+0xA00+4*21) |= 0x03; /* EMIFA */
  12. 12     REG(PSC_ADDR+0xA00+4*26) |= 0x03; /* UART0 */
  13. 13     REG(PSC_ADDR+0xA00+4*27) |= 0x03; /* UART1 */
  14. 14     REG(PSC_ADDR+0xA00+4*28) |= 0x03; /* UART2 */
  15. 15     REG(PSC_ADDR+0xA00+4*31) |= 0x03; /* I2C */
  16. 16     REG(PSC_ADDR+0xA00+4*33) |= 0x03; /* GPIO */
  17. 17     REG(PSC_ADDR+0xA00+4*34) |= 0x03; /* TIMER0 */
  18. 18     REG(PSC_ADDR+0xA00+4*35) |= 0x03; /* TIMER1 */
  19. 19
  20. 20     /* Set PTCMD.GO to 0x1 to initiate the state transtion for Modules in
  21. 21      * the ALWAYSON Power Domain
  22. 22 */
  23. 23     REG(PSC_PTCMD) = (1<<alwaysonpdnum);
  24. 24
  25. 25     /* Wait for PTSTAT.GOSTAT0 to clear to 0x0 */
  26. 26     while(! (((REG(PSC_PTSTAT) >> alwaysonpdnum) & 0x00000001) == 0));
  27. 27
  28. 28     /* Enable GIO3.3V cells used for EMAC (???) */
  29. 29     REG(VDD3P3V_PWDN) = (1<<27);  //disable clkout0
  30. 30
  31. 31     /* Select UART function on UART0 */
  32. 32     REG(PINMUX0) &= ~(0x0000003f << 18);
  33. 34     REG(PINMUX1) = ((1<<4)|(1<<2)|(1<<0));
  34. 35
  35. 36     /* Enable USB */
  36. 37     REG(PINMUX0) &= ~(0x80000000);
  37. 38
  38. 39     /* Set the Bus Priority Register to appropriate value */
  39. 40     REG(VBPR) = 0x20;
  40. 41 }
复制代码
白丁野老
3楼-- · 2019-07-28 03:03
 精彩回答 2  元偷偷看……
白丁野老
4楼-- · 2019-07-28 03:06
修改如下:
  1. 1 void NS16550_init (NS16550_t com_port, int baud_divisor)
  2. 2 {
  3. 3     com_port->ier = 0x00;
  4. 4 #if defined(CFG_DM6467_EVM)
  5. 5         com_port->mdr1 = 0x00;  /* select mode */
  6. 6 #endif
  7. 7 #if defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)
  8. 8     com_port->mdr1 = 0x7;    /* mode select reset TL16C750*/
  9. 9 #endif
  10. 10     com_port->lcr = UART_LCR_BKSE | UART_LCRVAL;
  11. 11     com_port->dll = 0;
  12. 12     com_port->dlm = 0;
  13. 13     com_port->lcr = UART_LCRVAL;
  14. 14     com_port->mcr = UART_MCRVAL;
  15. 15     com_port->fcr = UART_FCRVAL;
  16. 16     com_port->lcr = UART_LCR_BKSE | UART_LCRVAL;
  17. 17     com_port->dll = baud_divisor & 0xff;
  18. 18     com_port->dlm = (baud_divisor >> 8) & 0xff;
  19. 19     com_port->lcr = UART_LCRVAL;
  20. 20 #if defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)
  21. 21 #if defined(CONFIG_APTIX)
  22. 22     com_port->mdr1 = 3;    /* /13 mode so Aptix 6MHz can hit 115200 */
  23. 23 #else
  24. 24     com_port->mdr1 = 0;    /* /16 is proper to hit 115200 with 48MHz */
  25. 25 #endif
  26. 26 #endif /* CONFIG_OMAP */
  27. 27 }
复制代码
白丁野老
5楼-- · 2019-07-28 05:16
修改完上面的代码后,就可以在配置文件里添加配置信息,并修改调试调试串口号了。打开/include/configs/davinci_dm6467_evm.c,找到串口配置部分,修改如下:
  1. 1 /*====================*/
  2. 2 /* Serial Driver info */
  3. 3 /*====================*/
  4. 4 #define CONFIG_SYS_NS16550
  5. 5 #define CONFIG_SYS_NS16550_SERIAL
  6. 6 #define CONFIG_SYS_NS16550_REG_SIZE    4         /* NS16550 register size, byteorder */
  7. 7 //#define CONFIG_SYS_NS16550_COM1        0x01c20000    /* Base address of UART0 */
  8. 8 //#define CONFIG_CONS_INDEX        1        /* use UART0 for console */
  9. 9 //#define CONFIG_SYS_NS16550_COM2        0x01c20400    /* Base address of UART1 */
  10. 10 //#define CONFIG_CONS_INDEX        2        /* use UART1 for console */
  11. 11 #define CONFIG_SYS_NS16550_COM3        0x01c20800    /* Base address of UART2 */
  12. 12 #define CONFIG_CONS_INDEX        3        /* use UART2 for console */
  13. 13 #define CONFIG_SYS_NS16550_CLK        24000000    /* Input clock to NS16550 */
  14. 14 #define CONFIG_BAUDRATE            115200        /* Default baud rate */
  15. 15 #define CONFIG_SYS_BAUDRATE_TABLE    { 9600, 19200, 38400, 57600, 115200 }
复制代码
白丁野老
6楼-- · 2019-07-28 07:22
  重新编译UBOOT,下载测试,这时候UBOOT的打印信息应该从串口2输出了。
    正常情况下可以输出到下面的内容:
Starting kernel ...

一周热门 更多>