8-bit Knowledge Base

    Publish
     
      • 排除不能连接到所选USB调试适配器/ ToolStick基础适配器的错误

        Nari | 11/328/2014 | 04:30 AM

        问题

         

        我在Silicon Labs 8位 IDE中试图使用USB调试适配器或ToolStick基础适配器连接一个设备时,收到如下错误消息:

         

         1.png

        我如何才能解决这一问题?

         

        解答

         

        有以下几种原因可能导致出现这一错误消息:

         

        1. 您已经将设备连接到了另一个Silicon Labs IDE 实例。

         

        1. 您已经将设备连接到了ToolStick终端程序或某个其它ToolStick演示应用程序。

         

        1. 您机器上运行的某个程序或服务自动地试图以某一固定频率打开所有USB人机接口设备。

         

        通常情况下,该问题可通过关闭任何其它Silicon Labs IDE实例或ToolStick 应用程序得到解决。某些计算机生产商提供的机器带有诊断工具软件,这类软件会自动加载,并以共享读/写模式连接到所有人机接口设备。由于Silicon Labs IDE需要独占性地访问设备,所以诊断工具会妨碍IDE与调试适配器连接。

         

        如果上述方法不能解决您的问题,请尝试下面的解决方案。

         

        禁用所有开机自启动的应用程序及非微软服务,然后重新启动机器

         

        1. 从运行对话框或启动菜单运行msconfig。

         

        1. 点击 "Startup" 页签。取消选中那些您想禁用的开机自启动应用程序。记下那些您已禁用并要在稍后重新启用的应用程序。

         2.png

         

        1. 点击 "Services" 页签。取消选中那些您想禁用的开机自启动服务。选中 “Hide all Microsoft services” 以隐藏Windows 基本服务。

         3.png

         

        1. 点击 OK 并重新启动机器。

         

        1. 如果错误消息不再出现,则说明一个被禁用的应用程序或服务可能连接到调试适配器,从而妨碍IDE与调试适配器连接。逐个启用每个应用程序/服务,以确定哪个程序与调试适配器连接。在使用Silicon Labs IDE 时,让该程序保持在禁用状态。

         

        运行微软的任务管理器程序,以定位打开设备句柄的进程

         

        1. 从下面的链接下载并解压出任务管理器
          http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

         

        1. 运行任务管理器。任务管理器列出在您的机器上运行的所有进程,并列出每个进程所打开的句柄,包括目录、文件、注册表项等等。

         

        1. 按Ctrl+L 打开下方的窗格,以显示所选进程的活动句柄。

         

        1. 按Ctrl+F打开任务管理器搜索对话框。

         

        1. 搜索 “\Device\0”,以列出与设备打开句柄有关的所有进程。搜索结果会包含与很多类型的设备(包括声卡以及人机接口设备,例如调试适配器)连接的应用程序。

        4.png

         

        1. 很多程序通过标准Windows进程(例如svchost.exe 和 csrss.exe)与设备连接。点击每个搜索结果会高亮显示主应用程序进程树中的进程。这会告诉你哪个程序产生了标准Windows进程的实例。

         

        1.    还可以从HID兼容设备属性的Device Manager Details页中的Physical Device Object Name识别设备字符串。

         5.png

        1. 使用搜索结果来获得打开设备句柄的所有程序的列表,以查看是否有任何程序连接到调试适配器。
          提示:该程序也可用于确定哪个程序对一个文件加了锁,以防止该文件被删除。只需搜索文件名或文件夹名即可。
      • USB 调试适配器引脚输出(8 位)

        Nari | 11/328/2014 | 04:27 AM

        问题

         

        8 位版 USB 调试适配器的 2x5 调试连接器引脚输出是什么?

         

         

        答案

         

        USB 调试适配器 2x5(8 位)连接器如下所示:

         1.png

        此插针的引脚连接是:

        引脚

        描述

        详情

        1

        串行调试适配器的 3.3 V 电源

        此引脚通常不再使用且不应当连接。

        2

        接地

         

        3

        接地

         

        4

        C2 数据 (C2D) 或 JTAG TCK

         

        5

        C2 时钟引脚共享或 JTAG TMS

         

        6

        C2 数据引脚共享或 JTAG TDO

         

        7

        C2 时钟 (C2CK) 或 JTAG TDI

        UDA 使用此引脚来检测和设置逻辑电压电平。此引脚切勿下拉接地。

        8

        不连接

         

        9

        接地

         

        10

        USB 调试适配器提供的 5V 电源

        仅在目标设备由 UDA 供电时才需要连接此引脚。

         

        有关 C2 引脚共享的更多信息,请参见应用说明网页中的 AN124:http://www.silabs.com/products/mcu/Pages/ApplicationNotes.aspx

      • 8 位调试适配器:EC3 与 UDA-8

        Nari | 11/328/2014 | 04:26 AM

        问题

         

        我收到了有关 EC3 和 UDA-8 适配器的通知。它们是什么,这个通知意味着什么?

         

         

        答案

         

        EC3UDA-8 是两种类型的 8 位 USB 调试适配器。此两类适配器在 PC 的 USB 端口与 Silicon Labs 8 位目标设备的系统内调试/编程电路之间提供接口。10 针带状电缆将适配器连接至目标板和目标设备的调试接口。

         

        原来的 8 位适配器是 EC3,新的 8 位调试适配器是 UDA-8。新适配器 (UDA-8) 不再与旧版 Silicon Laboratories 软件兼容。Silicon Labs 强烈建议将软件升级为最新版本的 Silicon Laboratories 8 位 IDE 和闪存编程实用工具,您可以从以下地址进行下载:www.silabs.com/8bit-software. 旧版 8 位调试适配器 EC3 将于 2013 年 9 月 30 日停产。有关更多详情,请访问 www.silabs.com/8bit-uda

         

        这两类适配器之间的区别是,UDA-8 适配器在底部具有一个 UDA-8 标签。EC3 适配器或者没有此标签或者具有 EC3 标签。

         

         1.png

        如果我有 EC3 适配器,我需要做些什么?

         

        您不需要,EC3 将继续与 8 位设备和 8 位 microcontroller studio 兼容。

         

        如果我在套件中收到 UDA-8,它能够与我的 IDE 版本兼容吗?

         

        只要 IDE 是最新的,UDA-8 就可以与其兼容。您可以从 www.silabs.com/8bit-software 下载此最新软件。

        这两种适配器的引脚输出有任何不同吗?

        没有,这两种适配器的接口完全一样。有关此引脚输出的更多信息,请参见相关的知识库文章或登录 www.silabs.com/8bit-uda 查看用户指南。

      • SDCC 中断或 NOP 编译器错误

        Nari | 11/328/2014 | 04:25 AM

        问题

         

        我在使用 SDCC 版本 v3.2.0 时看到以下编译器错误:

         

        syntax error: token -> 'NOP' ; column 11

        syntax error: token -> 'interrupt' ; column 32

         

        如何修复这些错误?

         

         

        答案

         

        SDCC v3.2.0 取消了对几个过时关键字的支持,包括 interrupt(现在为 __interrupt)、_asm(现在为 __asm)和 _endasm(现在为 __endasm)。__asm 和 __endasm 关键字用于 NOP() 宏。

         

        2.4 版的 compiler _defs.h 处理了这些过时的关键字,现在,在使用高于 v3.0.0 的 SDCC 版本时,更新了 #defines。请下载最新版本的 IDE 以获得最新版本的 compiler_defs.h。此文档也随附了此文件的 2.4 版。

      • 通过 USB 编程

        Nari | 11/328/2014 | 04:20 AM

        问题

         

        我无法通过 USB 连接至 MCU 以对其编程。我可以如此操作吗?

         

         

        解决方案

         

        可以,但需要将 USB 引导装载程序(bootloader)烧录入设备以启用 USB 编程。需要通过 C2 调试接口将引导装载程序烧录入设备。如果需要,可以在订购设备时将 USB 引导装载程序预编程到设备中。您需要提供预编程中所用的映像文件。

         

        有关 USB 引导装载程序选项的更多信息以及有关 USB 的其他信息,请见以下网址中的应用说明:

         

        http://www.silabs.com/products/mcu/Pages/ApplicationNotes.aspx

      • 什么是 DPInst?

        Nari | 11/325/2014 | 04:54 AM

        问题

         

         

        什么是 DPInst?

         

         

        答案

         

         

        DPInst(驱动程序包安装程序)是由 Microsoft 提供的驱动安装程序。这是为 Silabs 驱动程序创建驱动安装程序的推荐方式。

         

        对于任何与 DIFx 兼容的驱动程序包(包括 AN220 驱动程序自定义向导的输出,此向导位于 www.silabs.com/interface-appnotes),DPInst 安装程序的可执行文件可以很方便地转存到驱动程序包和用于自定义安装程序行为的 INI 文件中。

         

        DPInst 安装程序的行为可以通过命令行开关或通过 INI 文件来配置。这些工具可用于禁用安装程序对话框(安静安装)、强制安装旧版本和控制卸载行为。

         

        有关 DPInst 的完整信息,请访问 MSDN,网址为:http://msdn.microsoft.com/en-us/library/ff544842(v=vs.85).aspx

         

        有关命令行的文档,请访问:http://msdn.microsoft.com/en-us/library/ff544775.aspx

         

        有关描述符文件的文档,请访问:http://msdn.microsoft.com/en-us/library/ff553560(v=vs.85).aspx

         

        与所有 Microsoft 产品一样,您可以通过以下电子邮件地址获取 DPInst 的支持:support@sysdev.microsoft.com

      • 使用 RSTSRC

        Nari | 11/324/2014 | 07:59 AM

        问题

         

        如何使用 RSTSRC 寄存器并设计我的固件来对不同的复位事件做出响应?

         

         

        答案

         

        RSTSRC 寄存器向固件通知最后一次设备复位的原因。此信息可用于提升系统的稳定性,甚至启用系统中的新功能。

         

        在读取 RSTSRC 寄存器的任何位之前,固件应当检查上电复位位。如果此位置位,寄存器中的其他位则为不确定的值。

         

        导致闪存错误复位的因素可能有多种:

        - 闪存写入/擦除例程可能尝试访问不在用户空间内的闪存区域或受 MCU 锁定字节保护的区域。

        - 对固件中不存在的函数进行调用,这可能会导致程序计数器跳转至项目范围之外的闪存区域。然后,失控的程序计数器可能超出用户代码空间范围并导致复位。

         

        外部振荡器出现故障或配置不正确时,会导致丢失时钟检测器事件。此外,当运行频率低于丢失时钟检测器电路能够测量的最低频率时,外部时钟源也可能导致此事件。如果固件在 C 模式或 RC 模式下使用外部振荡器,决定产生丢失时钟检测器复位的 catch 语句会设置一个向外部时钟初始化例程发送信号的变量,告诉此例程应该增加电路的驱动强度以增加生成的外部时钟频率。

         

        硬复位事件意味着 RST 引脚被触发为低电平。这可能是由最终产品的用户导致,或由故意复位 MCU 的系统中另一设备导致。固件可能将此类复位视为某种形式的用户输入并提供相应的操作响应。

         

        软复位事件意味着代码形式的固件置位了 RSTSRC 中强制硬件复位的位。固件可以使用此操作将自身置于特殊的操作状态。例如,系统可以将此类事件用作信号以将设备置于操作的引导装载状态。

         

        将最近复位事件的日志保存于非易失性存储器中以供日后分析和调试会非常有用。日志子系统应该分配闪存的整个页面并尽可能简洁地保存有关复位事件的信息。应该使用 Silicon Labs 定义的所有最佳做法执行闪存的写入和擦除操作。

      • UART 自动波特率检测

        Nari | 11/324/2014 | 07:58 AM

        问题

         

        Silicon Labs 8051 MCU 支持自动波特率检测吗?

         

         

        答案

        EFM8BB2 和 EFM8UB1 硬件支持自动波特率检测,更多详细信息请查看器件参考手册。

         

        C8051Fxxx 或 C8051Txxx 硬件不支持自动波特率检测。但是,'F93x 系列的随附代码示例通过外部中断和用于 UART 波特率的计时器来实现此功能。此代码可以移植到任何 Silicon Labs 8051 MCU。

         

        此程序复位之后以自动波特率模式启动,此模式中 MCU 会等待培训字符或 0xFF。

         65.png

         

        起始位始终为 0。在接收到此字符后,代码测量起始位的宽度以确定输入的波特率。

         

        复位之后,外部中断 (/INT1) 被路由至 UART RX 引脚 (P0.5),同时上升沿开启中断,计时器 1 被配置按通过 /INT1 选通的系统时钟计数。在起始位的下降沿,计时器 1 开始计数。在上升沿,计时器停止计数,外部中断产生触发器的中断。

         66.png

         

        外部中断 ISR 使用计时器 1 测量的值计算最接近的最佳 UART 波特率。然后,ISR 使用此计算的波特率将设备切换至 UART 模式

         

        处于 UART 模式之后,除了以下两个命令字符外,程序会对接收到的字符进行回应:0xF0 和 0xF1。如果设备收到 0xF0,将切换回自动波特率模式。如果向设备发出命令字符 0xF1,则 UART 传送可以用于排除程序故障的调试信息。此调试信息由 TH1 和 CKCON 值组成,可按照 UART 波特率设置对其编程。

         

        此固件已使用以下波特率进行测试:256000、230400、128000、115200、57600、38400、19200、14400、9600、4800、2400 和 1200。

         

        目前,自动波特率无法与 UART 操作同时运行,因为两种功能都使用计时器 1。如果代码被修改为使用计时器 0 和 /INT0,则固件可以持续监控 UART 流量。

      • SDCC 中断或 NOP 编译器错误

        Nari | 11/323/2014 | 04:17 PM

        问题

         

        我在使用 SDCC 版本 v3.2.0 时看到以下编译器错误:

         

        syntax error: token -> 'NOP' ; column 11

        syntax error: token -> 'interrupt' ; column 32

         

        如何修复这些错误?

         

         

        答案

         

        SDCC v3.2.0 取消了对几个过时关键字的支持,包括 interrupt现在为 __interrupt、_asm现在为 __asm和 _endasm现在为 __endasm。__asm 和 __endasm 关键字用于 NOP() 宏。

        2.4 版的 compiler _defs.h 处理了这些过时的关键字,现在,在使用高于 v3.0.0 的 SDCC 版本时,更新了 #defines。请下载最新版本的 IDE 以获得最新版本的 compiler_defs.h。此文档也随附了此文件的 2.4 版。

      • 闪存实用工具暂存器功能

        Nari | 11/323/2014 | 04:11 PM

        问题

         

        SiUtil DLL (AN117) 是否包含任何函数来访问某些设备上提供的存储器的暂存区域?

         

        答案

         

        是的,最新版本的 SiUtil DLL 包括两个访问暂存存储器的函数。这些函数的原型是:

        extern 'C' __declspec(dllexport) HRESULT __stdcall GetScratchPadMemory(
                        BYTE * ptrMem,
                        DWORD wStartAddress,
                        unsigned int nLength)
        {

         

        extern 'C' __declspec(dllexport) HRESULT __stdcall SetScratchPadMemory(
                        BYTE * ptrMem,
                        DWORD wStartAddress,
                        unsigned int nLength,
                        int nDisableDialogs)

        这些参数在性质上与 GetCodeMemory() 和 SetCodeMemory() 函数的参数类似。

        下一版本的 AN117(当前版本 3.3)将包含关于这些函数的信息。AN117 软件的最新版本可以从 www.silabs.com/8bit-appnotes 下载。