This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于bootloader的自动波特率检测的疑问和cmd的回复

Other Parts Discussed in Thread: CC1352R

您好!

这里的需求是实现板子对另一板子的代码load。

第一个疑问是串口波特率同步的过程,参考手册如下图描述:想确认一下波特率同步发送的必须是0x55+0x55吗?它内部gpio进入中断检测信号波特率的时候,比如0x88,猜测就会将波特率检测为一半?还是说内部gpio做了精确的判断,只有连续收到01010101+01010101这种情况下,才会成功判断出波特率,并走出这个中断。因为目前测试条件下,在发0x55+0x55前,rx还会收到其他的数据,是否会对这个波特率的判断产生影响,是否会影响返回的数据(目前一直接收不到数据,还在查原因,之前有接收到过ACK)

第二个疑问是波特率同步是否只能同步一次,也就是该gpio的中断进入一次后,下次再发同步数据,会没有响应?或者会对接下来的cmd的收发产生什么影响?是否板子断过一次点之后是否便可以重新进入同步的中断?

谢谢!

  • 你用的哪款产品,哪个参考文档?bootloader文件是从哪里获取的
  • 现在测试用的是cc1352r两块板子进行测试的
    参考文档是cc13x-cc26x的reference的bootloader部分
  • 如果是同步,必须是2个0x55,关于CC1352的自动波特率检测手册中说明比较简单,

    这里有份430的比较详细你可以看一下:

    automatic baud rate detection.pdf

  • 好的,谢谢你!
    和你反映一下刚刚的测试结果,直接在ccs debug的环境下,每次都是看一次的串口收发(bootloader),然后一直收到的是0;
    刚刚把收发放在while里,让ccs自动跑一段时间后,暂停再单次串口收发,去看结果,就正常的采集到了ACK,不知道怎么解释这个现象?也就是说我现在代码的写法如下:(write_uart=0x55)

    else//不同步,发送同步指令
    {
    while(!(rec_data[0]==0x00&&((rec_data[1]==0xcc)||(rec_data[1]==0x33))))
    {
    UART_write(uart, write_uart, 2);
    UART_read(uart, rec_data, 2);
    }
    GPIO_toggle(CONFIG_GPIO_LED_0);
    sync_flag = 1;
    }

    猜测是串口buffer之前会留着存有0数据?
  • 这个是由自动检测的机制决定的
    1. 从机先设置UART的接收管脚为输入IO

    2. 主机发送0X55同步字(8-N-0),这样在RX管脚上会出现 0-10101010-1的波形‘

    3. 从机捕获10之间的时钟数(或者第一个10到最后一个10的时钟数),把该数转换成UART的波特率值。

    4. 从机使能IO口为UART模式.

    只有同步成功才会返回确认,同步失败继续等待
  • 刚刚误以为0x33+0x33+0x33+0x33会误导从机~这么看来因为有停止位的关系也不会出现问题了!
    再请教一个问题,有没有参考的读取文件的例程呀?主机直接用fopen打开bin文件,然后把它下到从机?bin文件较大或者存到外设?这种实现的设计有什么可参考的吗?感谢!
  • 在C:\ti\simplelink_cc13x2_26x2_sdk_4_20_00_35\examples\rtos\CC1352R1_LAUNCHXL\drivers目录下
    fatsd例程你可以看一下