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.

[参考译文] TMS320F28386S:SCIA 引导加载程序

Guru**** 2337880 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1186210/tms320f28386s-scia-boot-loader

器件型号:TMS320F28386S

我们选择的 GPIO 引脚错误、Rx=9、TX=84、这不是允许的对之一。 因此、我将尝试仿真该代码的功能。 串行闪存编程器尝试下载闪存内核并且 SCI_Boot()接收到它。 在检查关键字并删除16个保留字节 CopyData()后,将调用它以接收文件。 文件以11个块的形式发送、但我不理解为什么所有块都具有相同的目标、因为块之间没有明显的处理。

BlockSize:2  destination:29184
BlockSize:24  destination:29184
BlockSize:1188  destination:29184
BlockSize:2  destination:29184
BlockSize:24  destination:29184
BlockSize:1188  destination:29184
BlockSize:307  destination:29184
BlockSize:4  destination:29184
BlockSize:4096  destination:29184
BlockSize:4096  destination:29184
BlockSize:1943  destination:29184

X

这是 bootloader_shared_funcs.c 中的代码

void CopyData(void)
{
    struct HEADER {
        uint32_t DestAddr;        
        uint16_t BlockSize;
    } BlockHeader;

    uint16_t wordData;
    uint16_t i;

    //
    // Get the size in words of the first block
    //
    BlockHeader.BlockSize = (*GetWordData)();

    //
    // While the block size is > 0 copy the data
    // to the DestAddr.  There is no error checking
    // as it is assumed the DestAddr is a valid
    // memory location
    //
    while(BlockHeader.BlockSize != (uint16_t)0x0000U)
    {
        BlockHeader.DestAddr = GetLongData();
        
        // Added for debugging
        printf("\r\nBlockSize:%d  destination:%d", BlockHeader.BlockSize, BlockHeader.DestAddr);
        
        for(i = 1; i <= BlockHeader.BlockSize; i++)
        {
            wordData = (*GetWordData)();
            *(uint16_t *)BlockHeader.DestAddr = wordData;
            BlockHeader.DestAddr+=1U;
        }

        //
        // Get the size of the next block
        //
        BlockHeader.BlockSize = (*GetWordData)();
    }

    return;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另一个观察结果或4.

    使用 hex2000.exe 转换的内核的文件大小为71K。

    串行闪存编程器显示它传输了23320字节。

    检查 VS 代码中的文件、它显示为十六进制转储、我看到16666字节。

    此外、波特率为19200、但传输文件需要380秒。 确实必须发回每个字节、但我认为这需要大约25秒。

    John Boy 再次感到困惑。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 John:

    感谢您的提问! 我将与串行闪存编程器专家联系。 请提供一些时间供该专家答复。


    谢谢!

    Vince

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你。 我要等。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 John:

    对于 CopyData 例程, 是否为 BlockHeader.DestAddr 的递增设置了监视表达式? 目的值应该增加。  

    谢谢、

    查尔斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我可能表达得不好。

    该变量在 CopyData 函数中递增、但每次新块启动时都会返回到相同的地址29184。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我发现了令人尴尬的错误并修复了它。