您尚未登录。

楼主 #1 2019-10-04 16:45:35

augyy
会员
注册时间: 2019-01-29
已发帖子: 46
积分: 46

全志A33 UART baudrate 921600 問題!!

現在我把A33 UART2 波特率設定為921600, 但是出來波特率是761904.

pro.png

同時我找到sunxi-uart.c file 裡要改apb2div. 請問那裡設定?

buadrate.png

离线

#2 2019-10-04 16:58:24

F1F2
会员
注册时间: 2017-09-11
已发帖子: 99
积分: 99

Re: 全志A33 UART baudrate 921600 問題!!

你如何确定是 761904 ?

离线

楼主 #3 2019-10-04 17:16:26

augyy
会员
注册时间: 2019-01-29
已发帖子: 46
积分: 46

Re: 全志A33 UART baudrate 921600 問題!!

用logic analyzer 望 output data. 所以知道波特率大約761904.
同時試過把設波特率定為 1500000, 是無問題!!

离线

#4 2019-10-04 21:05:52

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,349
积分: 9202

Re: 全志A33 UART baudrate 921600 問題!!

没有用过A33 bsp, 感觉这个地方不应该会出现bug,改天我在 V3s 上面试一试 921600





离线

#5 2019-10-08 17:48:17

阿黄
会员
注册时间: 2018-10-03
已发帖子: 299
积分: 134

Re: 全志A33 UART baudrate 921600 問題!!

会不会是逻辑分析仪的最大频率不够?

离线

楼主 #6 2019-10-09 16:05:29

augyy
会员
注册时间: 2019-01-29
已发帖子: 46
积分: 46

Re: 全志A33 UART baudrate 921600 問題!!

阿黄 说:

会不会是逻辑分析仪的最大频率不够?

逻辑分析仪频率應該足夠,因為可看到1500000频率

离线

#7 2019-10-09 23:53:01

checkout
会员
注册时间: 2018-11-09
已发帖子: 173
积分: 168

Re: 全志A33 UART baudrate 921600 問題!!

apb2时钟默认是OSC24M,时钟源应该使用PLL6,修改uboot时钟初始化的代码就行
24000000/16/921600=1.6276,向上取整,实际波特率24000000/16/2=750000,应该是这样

augyy 说:
阿黄 说:

会不会是逻辑分析仪的最大频率不够?

逻辑分析仪频率應該足夠,因為可看到1500000频率

最近编辑记录 checkout (2019-10-10 00:00:51)

离线

楼主 #8 2019-10-10 15:43:26

augyy
会员
注册时间: 2019-01-29
已发帖子: 46
积分: 46

Re: 全志A33 UART baudrate 921600 問題!!

checkout 说:

apb2时钟默认是OSC24M,时钟源应该使用PLL6,修改uboot时钟初始化的代码就行
24000000/16/921600=1.6276,向上取整,实际波特率24000000/16/2=750000,应该是这样

augyy 说:
阿黄 说:

会不会是逻辑分析仪的最大频率不够?

逻辑分析仪频率應該足夠,因為可看到1500000频率

https://whycan.cn/files/members/1429/CONFIG_SYS_NS16550_CLK.png

是否直接把CONFIG_SYS_NS16550_CLK 為 (30000000) ?

离线

#9 2019-10-10 15:53:47

checkout
会员
注册时间: 2018-11-09
已发帖子: 173
积分: 168

Re: 全志A33 UART baudrate 921600 問題!!

修改uboot的clock_sun6i.c文件:

void clock_init_uart(void)
{
#if CONFIG_CONS_INDEX < 5
        struct sunxi_ccm_reg *const ccm =
                (struct sunxi_ccm_reg *)SUNXI_CCM_BASE;

        /* uart clock source is apb2 */
        writel(APB2_CLK_SRC_OSC24M|      //这里改为APB2_CLK_SRC_PLL6,从内部pll6时钟分频
            APB2_CLK_RATE_N_1|
            APB2_CLK_RATE_M(1),
            &ccm->apb2_div);

离线

楼主 #10 2019-10-10 17:01:32

augyy
会员
注册时间: 2019-01-29
已发帖子: 46
积分: 46

Re: 全志A33 UART baudrate 921600 問題!!

只找到board.c 同 serial_tegra2.c 文件

FluxBB bbcode

FluxBB bbcode

是否改setup_uart(..) function
reg = NVRM_PLLP_FIXED_FREQ_KHZ * 1000 / NV_DEFAULT_DEBUF_BAUD / 16 的
16 為 20 or 其他?

最近编辑记录 augyy (2019-10-10 17:12:43)

离线

#11 2019-10-10 17:20:53

checkout
会员
注册时间: 2018-11-09
已发帖子: 173
积分: 168

Re: 全志A33 UART baudrate 921600 問題!!

你uboot用的哪个版本?看看时钟初始化部分,改改试试

离线

楼主 #12 2019-10-17 17:18:05

augyy
会员
注册时间: 2019-01-29
已发帖子: 46
积分: 46

Re: 全志A33 UART baudrate 921600 問題!!

我用u-boot-2011.09 版本的. 同sun8iw5p1.h

最近编辑记录 augyy (2019-10-17 17:18:49)

离线

#13 2019-10-17 21:34:46

checkout
会员
注册时间: 2018-11-09
已发帖子: 173
积分: 168

Re: 全志A33 UART baudrate 921600 問題!!

胸弟,你看!!摊手.jpg
APB2默认时钟源是24MHz.你要改成PLL_PERIPH
clock_tree.png
clock_20191017-2115.png
u-boot-2011.09/arch/arm/cpu/armv7/sun8iw5/clock.c中,函数sunxi_clock_set_corepll(xxx)进行了时钟初始化...
在这里修改:

int sunxi_clock_set_corepll(int frequency, int core_vol)
{
    unsigned int reg_val;
    unsigned int i;
    struct core_pll_freq_tbl  pll_factor;
    //检查时钟是否合法,为0或者超过2G
    if(!frequency)
    {
        //默认频率
        frequency = 408;
    }
    else if(frequency < 24)
    {
		frequency = 24;
    }
    //切换到24M
    reg_val = readl(CCM_CPU_L2_AXI_CTRL);
    reg_val &= ~(0x03 << 16);
    reg_val |=  (0x01 << 16);
    writel(reg_val, CCM_CPU_L2_AXI_CTRL);
    //延时,等待时钟稳定
    for(i=0; i<0x400; i++);
    //调整时钟频率
	clk_get_pll_para(&pll_factor, frequency);
	//回写PLL1
    reg_val = readl(CCM_PLL1_CPUX_CTRL);
    reg_val &= ~((0x03 << 16) | (0x1f << 8) | (0x03 << 4) | (0x03 << 0));
	reg_val |=  (pll_factor.FactorP << 16) | (pll_factor.FactorN<<8) | (pll_factor.FactorK<<4) | (0 << 0) ;
    writel(reg_val, CCM_PLL1_CPUX_CTRL);
    //延时,等待时钟稳定
#ifndef CONFIG_A67_FPGA
	do
	{
		reg_val = readl(CCM_PLL1_CPUX_CTRL);
	}
	while(!(reg_val & (0x1 << 28)));
#endif
    //修改AXI,AHB,APB分频
    clk_set_divd();
    //切换时钟到COREPLL上
    reg_val = readl(CCM_CPU_L2_AXI_CTRL);
    reg_val &= ~(0x03 << 16);
    reg_val |=  (0x02 << 16);
    writel(reg_val, CCM_CPU_L2_AXI_CTRL);
    
    //修改apb2时钟源,自己添加。。
    return  0;
}

下面这个顺便也要改一下,改成600

/*
************************************************************************************************************
*
*                                             function
*
*    函数名称:
*
*    参数列表:
*
*
*
*    返回值  :
*
*    说明    :
*
*
************************************************************************************************************
*/
int sunxi_clock_get_apb2(void)
{
        //return 24;
	return 600;//改成600
}

最近编辑记录 checkout (2019-10-17 21:35:23)

离线

楼主 #14 2019-10-25 11:30:33

augyy
会员
注册时间: 2019-01-29
已发帖子: 46
积分: 46

Re: 全志A33 UART baudrate 921600 問題!!

出到921600波特率了. 謝謝!!

离线

#15 2019-10-25 11:32:41

jimmy
会员
注册时间: 2017-10-29
已发帖子: 316
积分: 315

Re: 全志A33 UART baudrate 921600 問題!!

augyy 说:

出到921600波特率了. 謝謝!!

请问怎么做到的呢?

离线

楼主 #16 2019-10-25 12:02:07

augyy
会员
注册时间: 2019-01-29
已发帖子: 46
积分: 46

Re: 全志A33 UART baudrate 921600 問題!!

jimmy 说:
augyy 说:

出到921600波特率了. 謝謝!!

请问怎么做到的呢?

Linus-SDK/dragonboard/brandy/u-boot-2011.09/arch/arm/cpu/armv7/sun8iw5/clock.c

int sunxi_clock_set_corepll(xxx) 加 :

    reg_val = readl(CCM_APB2_CLK_CTRL);
    reg_val &= ~((0x03 << 24) | (0x.03 << 16) | (0x1f << 0);
    reg_val |= (0x02 << 24) | (0x07 << 0);
    writel(reg_val, CCM_APB2_CLK_CTRL);

int sunxi_clock_get_apb2(void) 改:
   //return 24;
   return 600;

之後起 brandy/ 行 ./build.sh -p sun8iw5p1

离线

#17 2019-10-25 12:58:40

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,349
积分: 9202

Re: 全志A33 UART baudrate 921600 問題!!

感谢@augyy分享宝贵经验





离线

#18 2020-04-22 18:13:59

heirun
会员
注册时间: 2018-06-29
已发帖子: 16
积分: 11

Re: 全志A33 UART baudrate 921600 問題!!

使用的是u-boot-2014.07,这个要怎么改呢

离线

#19 2020-05-02 20:28:07

john78
会员
注册时间: 2018-07-19
已发帖子: 222
积分: 160

Re: 全志A33 UART baudrate 921600 問題!!

这个只要修改U-BOOT,LINUX系统中不需要修改?

离线

#20 2020-05-02 22:03:01

john78
会员
注册时间: 2018-07-19
已发帖子: 222
积分: 160

Re: 全志A33 UART baudrate 921600 問題!!

V3S 改后通讯1分钟不到,就中断了void clock_init_uart(void)
{
#if CONFIG_CONS_INDEX < 5
        struct sunxi_ccm_reg *const ccm =
                (struct sunxi_ccm_reg *)SUNXI_CCM_BASE;

        /* uart clock source is apb2 */
        writel(APB2_CLK_SRC_OSC24M|      //这里改为APB2_CLK_SRC_PLL6,从内部pll6时钟分频
               APB2_CLK_RATE_N_1|               //这里预分频不变
               APB2_CLK_RATE_M(1),
               &ccm->apb2_div);

离线

#21 2020-05-03 08:21:13

john78
会员
注册时间: 2018-07-19
已发帖子: 222
积分: 160

Re: 全志A33 UART baudrate 921600 問題!!

有没有在V3S上成功的?

------------修改后报错--------------------

[   12.899663] serial8250: too much work for irq37
[   12.904480] serial8250: too much work for irq37
[   12.909318] serial8250: too much work for irq37
[   12.914110] serial8250: too much work for irq37
[   12.918913] serial8250: too much work for irq37
[   12.923701] serial8250: too much work for irq37
[   12.928497] serial8250: too much work for irq37
[   12.933284] serial8250: too much work for irq37
[   12.938079] serial8250: too much work for irq37
[   12.942866] serial8250: too much work for irq37

离线

#22 2020-12-30 15:21:48

路人
会员
注册时间: 2020-12-30
已发帖子: 11
积分: 1

Re: 全志A33 UART baudrate 921600 問題!!

john78 说:

有没有在V3S上成功的?

------------修改后报错--------------------

[   12.899663] serial8250: too much work for irq37
[   12.904480] serial8250: too much work for irq37
[   12.909318] serial8250: too much work for irq37
[   12.914110] serial8250: too much work for irq37
[   12.918913] serial8250: too much work for irq37
[   12.923701] serial8250: too much work for irq37
[   12.928497] serial8250: too much work for irq37
[   12.933284] serial8250: too much work for irq37
[   12.938079] serial8250: too much work for irq37
[   12.942866] serial8250: too much work for irq37

问题解决了吗?  遇到同样的问题

离线

#23 2023-03-03 11:32:53

谢图图
会员
注册时间: 2023-02-15
已发帖子: 7
积分: 2

Re: 全志A33 UART baudrate 921600 問題!!

@路人
求问,该问题解决了吗?我也遇到了同样问题

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn