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.

[参考译文] LAUNCHXL-CC2650:I'll PayPal 您将获得100美元的付款、向我发送一个修改后的 ProjectZero、它可与 CC2650 Launchpad 外部闪存芯片通信

Guru**** 2561330 points
Other Parts Discussed in Thread: LAUNCHXL-CC2650, BLE-STACK, CC2640R2F, CC2650, LAUNCHXL-CC2640R2, CC2640

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/570578/launchxl-cc2650-i-ll-paypal-you-100-to-send-me-a-modified-projectzero-that-talks-to-the-cc2650-launchpad-external-flash-chip

器件型号:LAUNCHXL-CC2650
Thread 中讨论的其他器件: BLE-STACKCC2640R2FCC2650LAUNCHXL-CC2640R2CC2640

我已经尝试过几天将 ExtFlash.h 和 ExtFlash.c 添加到 LAUNCHXL-CC2650的全功能 ProjectZero 中、以便我可以读取数据并将其写入 ITs1MB 外部闪存。

我学到了很多、但不知道如何做到。

我将通过 PayPal 向第一个人发送100美元、通过电子邮件向我发送一个压缩的 ProjectZero、该 ProjectZero 会生成和运行并执行上述操作。

请,我绝望了。

我说这个、看看我、这是我的真实姓名。

Dale Kramer

kci@vaxxine.com

Lazair 和 eLazair 设计师

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

    谢谢你,但我想我已经记住了很多,大部分都让我希望:

    "将外部闪存存储器置于低功耗模式

    用于固件升级的外部串行闪存(OAD/DFU)必须置于低功耗模式、以实现最佳的电路板待机电流消耗。 以下步骤可用于将外部串行闪存置于低功耗模式:

    1. 将外部闪存驱动程序和 include 文件 ExtFlash.c/.h 包含到项目中。 外部闪存驱动程序位于 TI-RTOS 安装程序中。
      • 对于 BLE-Stack v2.2.1、这是 C:\ti_tirtos_cc13xx_cc26xx_2_20_00_06\products\tidrivers_cc13xx_cc26xx_2_20_00_08\packages/ti\mw\extflash
      • 添加到您的应用程序文件:#include
    2. 调用 ExtFlash_open ();后跟 ExtFlash_close ();进入应用程序的初始化任务 Fxn,如 SimpleBLEPeripheral_init ()。
      • 注:不能在 main 中调用 open/close 函数,并且必须在 BIOS_start()之后调用。

    应用手册 测量低功耗蓝牙(SWRA478) 版本 B 或更高版本中也列出了详细的过程。 处于低功耗模式时、LaunchPad 上的外部串行闪存将消耗~ 100nA 的电流。"

    我同时使用了使用编译器 v5.2.6的 SimpleLink Academy ProjectZero 和使用编译器 v16.9.0.LTS 的云端 ProjectZero。

    我确保 ExtFlash 文件存在并且包含在其中、并且在 BIOS_start()之后调用 ExtFlash_open。  这会导致处理器在到达 SPICC26XXDMA.c 的第864行后卡在汇编语言中:

           如果(!semaphore_pend (semaphore_handle (&(object->transferComplete))、object->transferTimeout)){//Dale 卡在此处

    我已为 Academy 版本附加压缩的项目文件夹(较小的调试文件夹)。

    我刚从想法和技能组合中走出来。

    戴尔

    e2e.ti.com/.../FromAcademy.zip

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

    您好 Dale、

    虽然在 LAUNCHXL-CC2650上、外部闪存访问不是 Project Zero 的既定目标、但我能够通过 SimpleLink Academy v1.11中的 Project Zero 获取外部 SPI 闪存访问。 我正在使用 CCS v7与本地 BLE-Stack v2.2.1安装。Project Zero 导入到本地 CCS 工作区。 使用 TI 编译器16.9.0.LTS。

    要为应用释放空间(CC2640R2F 不需要)、您可以禁用配对/绑定和 OSAL SNV。 这些步骤在软件开发人员指南(SWRU393)中有更详细的描述、但为简便起见、我在下面已经注明:

    在 Stack 项目中、

    tools -> build_config.opt、使用 -dgap_bond_Mgr 注释掉该行
    在堆栈项目属性中将预定义的符号 OSAL_SNV 修改为 OSAL_SNV=0

    重建堆栈。 映射文件应显示0x11000的入口地址。

    返回到应用程序项目。 如您所做的那样启用 extFlash.c/h 和 SPI 驱动程序。 对于此示例、您还需要配置文件/oad_target_external_flash.c。 在 main.c 中,添加对 SPI_init()的调用。 添加预定义符号:Feature_OAD 以编译 OAD_TARGET_EXTERNAL_FLASH.c 中的代码

    替换为随附的 project_zero.c 这使用按钮处理程序 fxn user_handleButtonPress()来读取/写入和擦除外部闪存。

    e2e.ti.com/.../6523.project_5F00_zero.c

    祝你一切顺利

    编辑:更新了、更正如下。

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

    JXS、谢谢!

    使用 OAD 函数而不是更直接的 ExtFlash 函数的需求是什么?

    此外、我非常接近、但我得到了这个构建错误、我忘记了什么?  这些函数在 oad_target.h 中定义、并且存在于 OAD_TARGET_EXTERNAL_FLASH.c 中、为什么会出现构建错误?

     未定义           的首次引用
     符号                      
     ------            --------
     OADTarget_Close      
     OADTarget_eraseFlash
     OADTarget_open       
     OADTarget_readFlash  
     OADTarget_writeFlash

    错误#10234-D:未解析的符号仍然存在
    错误#10010:链接期间遇到错误;未构建"project_zero_app_cc2650launchxl.out"

    戴尔

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

    您是否取消选中了"exclude from build"选项、使 oad_target_extflash.c 包含在您的项目中? 您应该会看到它是在构建日志中构建的、并且在映射文件中被引用。

    本示例选择了 OADTarget API、因为它们具有 ExtFlash 驱动程序的功能实现。 这些 API 中没有特定于 OAD 的内容。

    此外、可能无法通过 SPI 单步执行/绕过代码访问闪存、因此您应该在预期执行之前或之后放置断点。

    但愿这对您有所帮助。

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

    抱歉、文件名是 OAD_TARGET_EXTERNAL_FLASH.c (不是 OAD_TARGET_extflash.c)、并且未选中"从编译中排除"。

    我不确定在哪里找到构建日志文件。

    我在 Debug 文件夹中找到的.map 文件中没有'oad_target_external_flash'。

    我确实在构建项目时滚动的控制台窗口中找到了以下摘录:

    '生成文件:./PROFILES/oad_target_external_flash.c '
    '调用:ARM 编译器'
    "c:/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.0.LTS/bin/armcl "-cmd_file="c:/ti/simplelink/ble_sdk_2_02_01_18/src/config/build_components.opt "--cmd_file="C:/Users/Dale/workspace_v7/project_zero_stack_cc2650/TOOLS/build_config.opt "-cmd_file="C:/Users/Dale/workspace_v7/project_zero_stack_cc2650/TOOLS/ccs_compiler_defines.bcfg /Users/Dale/workspace_v7/project_zero_app_cc2650launchxl/ICallBLE /ti/simplelink_academy_01_11_00_0000/modules/projects/support_files/Components/uart_log /ti/simplelink/ble_sdk_2_02_01_18/src/icall/inc /ti/simplelink/ble_sdk_2_02_01_18/src/profiles/dev_info /ti/simplelink/ble_sdk_2_02_01_18/src/common/cc26xx "-mv7M3 -code_state=16 -me -O4 -opt_for_speed=0 -include_path="c_c_path=/Users/Dale/workspace_v7/project_zero_app_cc2650launchxl/Profiles /Users/Dale/workspace_v7/project_zero_app_cc2650launchxl/Startup /ti/simplelink/ble_sdk_2_02_01_18/src/examples/simple_peripheral/cc26xx/app /ti/simplelink/ble_sdk_2_02_01_18/src/profiles/roles/cc26xx /ti/simplelink/ble_sdk_2_02_01_18/src/profiles/simple_profile/cc26xx /ti/simplelink/ble_sdk_2_02_01_18/src/components/heapmgr -include_trine-.com.cn"-cn"/Users/Dale/workspace_v7/project_zero_app_cc2650launchxl/Application -include_path=/Users/Dale/workspace_v7/project_zero_app_cc2650launchxl/Board:c.com.cn"-.com.cn"-cn_path=/ti/simplelink/ble_sdk_2_02_01_18/src/inc /ti/simplelink/ble_sdk_2_02_01_18/src/profiles/roles /ti/simplelink/ble_sdk_2_02_01_18/src/profiles/simple_profile /ti/simplelink/ble_sdk_2_02_01_18/src/controller/cc26xx/inc include_path="c:/ti/simplelink/ble_sdk_2_02_01_18/src/components/hal/src/target/_common --include_path="c:/ti/simplelink/ble_sdk_2_02_01_18/src/components/hal/src/target --include_path="c:/ti/simplelink/ble_sdk_2_02_01_18/src/components/hal/src/target/_common/cc26xx --include_path="c:/ti/simplelink/ble_sdk_2_02_01_18/src/components/hal/src/inc /ti/simplelink/ble_sdk_2_02_01_18/src/components/services/src/saddr /ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.0.LTS/include --include_path="c:/ti/simplelink/ble_sdk_2_02_01_18/src/components/osal/src/inc --include_path="c:/ti/simplelink/ble_sdk_2_02_01_18/src/components/icall/src/inc --include_path="c:/ti/simplelink/ble_sdk_2_02_01_18/src/components/services/src/sdata /ti/tirtos_cc13xx_cc26xx_2_20_01_08/products/cc26xxware_2_24_02_17393 --include_display_define =--excluse_display_max=use_display_size=c_support=use_display_support=use_display_size=xr=--exclude_display_target=us_target=us_size=c=us_target=us_display_target=us_size=ine_display_target=us_target=ine_display_target=us_target=ine_display_target=us_target=ine_display_target=_size=ine_display_target=ine_display_target=culd_trade_display_size=ine_display_size=ine_display_target=ine_display_size=ine_display_target=ine_display_target=ue_display_target=ue_display_target=ue_display_target=ine_display_target=ue_display_target=ue_ define=UARTLOG_NUM_EVT_BUF=32 -g -c99 -gcc -diag_warning=225 -diag_warning=255 -diag_wrap=off -display_error_number -gen_func_subsections=on -abi=eabi -preoad_with_target-preproc_profiles="overview_build_files="/PROFILES/oad_target_external_flash.c files.config_overview"-overview_files=on -overview_overview_overview_overview_overview_overview_overview_overview.profiles=on -overview_overview_overview_overview_ov
    '完成的建筑:./PROFILES/oad_target_external_flash.c

    啊、我以为我会疯狂地单步执行代码、执行点最近会奇怪地跳转。

    很抱歉,这是一个新手!!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没错、它是 oad_target_external_flash.c 很抱歉造成混淆。 您可能知道无论如何都是通过执行文件搜索来实现的:)

    您是否仍然遇到链接器问题? 您的 project_zero.c 中是否有#include "oad_target.h"?
    在构建日志中、在链接期间、您应该在'Invoking:ARM Linker'之后具有:"./PROFILES/oad_target_external_flash.obj。

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

    是的、我在 project_zero.c 中有#include "oad_target.h"(我的 project_zero.c 是您的6523.Project_zero.c)。

    是仍然存在链接器问题。

    Ah、我找到了构建日志(C:\Users\Dale\workspace_v7\.metadata\.plugins\org.eclipse.cdt.ui\project_zero_app_cc2650launchxl.build.log)。 这是整个构建日志、 在'Invoking:ARM Linker'之后有"./PROFILES/oad_target_external_flash.obj:


    ****为项目 project_zero_app_cc2650launchxl 构建配置调试****

    "C:\\ti\\ccsv7\\utils\\bin\\gmake"-j -k -j 4 all -O
    '构建目标:project_zero_app_cc2650launchxl.out'
    '调用:ARM 链接器'
    "c:/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.0.LTS/bin/armcl "-cmd_file="c:/ti/simplelink/ble_sdk_2_02_01_18/src/config/build_components.opt "--cmd_file="C:/Users/Dale/workspace_v7/project_zero_stack_cc2650/TOOLS/build_config.opt "-cmd_file="C:/Users/Dale/workspace_v7/project_zero_stack_cc2650/TOOLS/ccs_compiler_defines.bcfg "-mv7M3 -code_state=16 -me -O4 -opt_for_speed=0 -define=use_icalL -assertion=power_saving-NUMv7M3 -code_display_define=xrate=xrand_define_display=xrate=v64_define -define_display_max=xrand=xrate=xrand=v_define -define_display_rate=xrand=xrand=xrf=xrulate_ular_= xrand=xrular_= xrand=xrate=v_= xtage_display_= xrand=v=v_def_defines=xrand=xrand=xrand=xrand=xrand=xral_display_= xrate=xrule_display_= xrate=v_= xrand=xrand= gcc --diag_warning=225 --diag_warning=255 --diag_wrap=off --display_error_number --gen_func_subsections=on --abi=eabi -z -m"project_zero_app_cc2650diaglaunchxl.map"--hack_size=0 --stack_size=256 -abit_caps=2-express-track_caps=10at_ex-d=10at_ex-cn_express-track_capsi-display_line-d=d=d=10at_line-express-cn_cn_cn_line-display_cn_guid-d=d=d=2-intrack_off-d_guid_guid_guide-d=10325-d_guid_guide-d=2-ine-d_guid_guide-d=2-ine-d_guide-d_/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.0.LTS/include /ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.0.LTS/lib rom_model -o "project_zero_app_cc2650launchxl.out""./Application/project_zero.obj ""./Application/util.obj ""./Drivers/ECC/ECCROMCC26XX.obj ""./Drivers/SPI/SPI.obj ""./Drivers/TRNG/TRNGCC26XX.obj ""./ICall/icall.obj ""./ICallBLE/icall_api.obj ""./ICall/icall_cc2650.obj ""./ICallBLE/ble_user_config.obj /PROFILES/button_service.obj /PROFILES/gatt_uuid.obj /PROFILES/oad_target_external_flash.obj /Startup/main.obj /ti/simplelink/ble_sdk_2_02_01_18/src/rom/common_rom_releases/03282014/common_rom.symbols ""./PROFILES/data_service.obj "".c /PROFILES/gattservapp_util.obj ".c:/Board/CC2650_LAUNCHXL.obj /PROFILES/peripheral.obj -l.c /Utils/uart_logs.obj /Users/Dale/workspace_v7/project_zero_stack_cc2650/TOOLS/ccs_linker_defines.cmd "/Drivers/SPI/SPICC26XXDMA.obj ".c:/Middleware/extflash/ExtFlash.obj /PROFILES/devinfoservice.obj /PROFILES/led_service.obj /Startup/ccfg_app_ble.obj /ti/tirtos_cc13xx_cc26xx_2_20_01_08/products/cc26xxware_2_24_02_17393/driverlib/bin/ccs/driverlib.lib /ti/simplelink/ble_sdk_2_02_01_18/src/common/cc26xx/ccs/cc26xx_app.cmd


     未定义           的首次引用
     符号                      
     ------            --------
     OADTarget_Close      
     OADTarget_eraseFlash
     OADTarget_open       
     OADTarget_readFlash  
     OADTarget_writeFlash

    错误#10234-D:未解析的符号仍然存在
    错误#10010:链接期间遇到错误;未构建"project_zero_app_cc2650launchxl.out"

    >>编译失败
    Makefile:192:目标'project_zero_app_cc2650launchxl.out'的配方失败
    gmaked[1]:***[project_zero_app_cc2650launchxl.out]错误1.
    Makefile:185:目标'all'的配方失败
    gmake:***[全部]错误2.

    ****构建完成****

    非常奇怪…

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哦、是的、Feature_OAD 也必须定义为预定义符号。 否则、OAD_TARGET_EXTERNAL_FLASH.c 会被清除。

    我想你几乎在那里!

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

    就是这样! 很难使用断点进行调试、但我可以使用 Putty 获取您的全部四条消息(以及一组 SPI 消息)。

    对于随后的用户、您能否编辑您的答案(如上所述)以包含预定义的符号要求? 此外、对于像我这样的新手、我认为我必须在 main.c 中包含 spi.h

    总之,JXS,你是我的英雄!!! 虽然不完全符合我的提议条款(我通过这种方式了解了更多信息),但我仍愿意继续跟进,请将您的电子邮件地址发送给我的。

    虽然向外部闪存写入数据不是 ProjectZero 的既定目标、但它是 CC2650 LaunchPad 的一项显著宣传功能。 用示例代码访问它非常令人惊讶。

    非常感谢!

    戴尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Dale、很高兴看到您的工作正常! 我将了解我们是否可以将您的反馈整合到 Project Zero 的 LAUNCHXL-CC2640R2版本中、我们可以在该版本中为其他软件功能留出更多空间。

    关于这项提议,我们非常赞赏;然而,我们的支持是免费提供的。 如果您再购买几款 CC2640,我们甚至会将其称为;)

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们将继续这个项目、今天应该组装一个 PCB、这个 PCB 上有一个 GT-tronics 预先认证的2640子板和一个 Winbond 256mbit 闪存、希望我能够弄清楚要更改什么、以便将这个代码写入该闪存。

    BTW、您能不能确定为什么我不再在 UART 日志中收到按钮按压消息。 必须触发按钮按压操作、但日志中的 SPI 消息必须优先、并且"已按下"消息将丢失。

    谢谢、
    戴尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    祝您今天的启动好运!

    要抑制可能会清除 PZ 按钮按压日志的 SPI 调试消息、可以右键单击 SPICC26XXDMA.c 文件并设置预定义符号:XDC_Runtime_Log_disable_all

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

    非常好! 非常有用,不能看到这些 SPI 调试消息,希望我永远不需要重新打开它们:)

    谢谢、

    戴尔

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

    已删除

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

    已删除

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

    已删除

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

    否、编程时闪存器件使用3字节地址。 查看 MX25R8035F 闪存数据表的页面程序部分可能会有所帮助、其中提供了页面(256字节)程序序列的说明。

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

    非常混乱…

    我想我会混淆两种不同的页面大小。

    在 ExtFlash.c 中:

    /*器件特定常量*/
    #define BLS_program_page_size    256
    #define BLS_ERASE_Sector_SIZE    4096

    在 ExtFlash.h 中:

    #define EXT_FLASH_PAGE_SIZE  4096


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

    JXS、

    使用示例6523.project_zero.c、基本的读、写和擦除显然可以正常工作。

    我认为最小擦除大小是4096字节的扇区、因此当你调用 OADTarget_eraseFlash (1)时、所有扇区1应该被设定为1、或者每个字节被设定为0xFF。

    但是、如果我在 第248行中只定义一个4096零的 uint_8数组:

    uint8_t sectorbytes[4096]={0};//Dale

    并在 OADTarget_eraseFlash (1)之后直接添加此行;

    OADTarget_readFlash (1、0、sectorbytes、4096);//Dale

    SECTORBytes 并不是全部为0xFF 字节。

    开头有3072 0x00字节、其余为0xFF 字节。  无论哪个扇区被擦除、然后再次读取、该结果都是一致的。

    对我来说、这告诉我 OADTarget_eraseFlash 不起作用。

    我缺少什么?

    EDIT1:

    实际上、问题器更多地指向 OADTarget_readFlash 函数。  如果我将段字节的长度定义为3072、则读取返回正确的3072 0xFF、而定义的大于3072的任何大小返回3072 0x00、而平衡为0xFF。

    非常奇怪!!

    戴尔

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

    我在这个 OADTarget_readFlash 问题上启动了一个新的论坛主题、如果有人可以帮助我:

    谢谢、

    戴尔