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.

[参考译文] DLPDLCR2000EVM:通过 I2C (DLPDLCR2000EVM、DLP2000、DLPC2607)读取/写入闪存

Guru**** 2548830 points
Other Parts Discussed in Thread: DLPDLCR160CPEVM, DLP160CP, DLPDLCR2000EVM, DLP2000, DLPC2607

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

https://e2e.ti.com/support/dlp-products-group/dlp/f/dlp-products-forum/1467080/dlpdlcr2000evm-reading-writing-flash-via-i2c-dlpdlcr2000evm-dlp2000-dlpc2607

器件型号:DLPDLCR2000EVM
主题中讨论的其他器件: DLP2000DLPC2607、DLPDLCR160CPEVM 、DLP160CP

工具与软件:

您好!

我正在使用 DLP2000的开发板(DLPDLCR2000EVM)。

注意:开发板应与 BBB (BeagleBone Black)"即插即用"、但对它的支持实际上已经过时了... BBB 的 Debian 最后一个版本不再包含"opt/scripts"、也不会检测到 DLP 开发板。 我尝试手动安装(从 https://github.com/RobertCNelson/boot-scripts/tree/master/device/bone/capes/DLPDLCR2000 ) ,但演示脚本是用 Python 2写的(!) 并需要 Qt4框架、该框架已从 Ubuntu 和 Debian 中删除了很长时间...

因此、我决定/不得不切换到作为"主机处理器"的 Arduino、并通过 I2C 与 DLP 进行交互。

按照"DLPC2607软件程序员指南"、我可以通过 I2C 成功读取和写入 DLPC2607;例如、通过不同的预编程测试模式循环。 但遗憾的是、我无法成功读取闪存(通过 I2C"低电平"接口)... 我是为了得到一些指导而跳跃:)

我将尝试执行基本的"Flash 读取命令序列"(DLPC2607指南中的第2.3.2.3.3小节)。 我的伪代码如下:

//1.a:设置 DMA 起始地址
W 0x36 0x79    0x 00 04 D0 00 //启动序列位置= x0004、D000 (启动界面编号0)

//1.b:设置 DMA 大小)
W 0x36 0x77    0x 00 00 FF //RDATA_BYTE_QTY = 256字节

//1.c:设置闪存读取操作码
W 0x36 0x78    0x 00 00 00 0B //快速只读、代码是 x0B

//1.d:设置闪存读取虚拟字节
W 0x36 0x75    0x 00 00 00 01 //dummy_byte_Qty (在 DLCP 数据表中已固定)

//1.e:设置闪存地址字节
W 0x36 0x74    0x 00 00 00 03 //ADDR_BYTE_QTY (在 DLCP 数据表中固定

//
//此时、我可以读取并检查寄存器0x79、0x77、0x78、0x75和0x74是否已更新为新值
//

//2A:在读取模式中设置 FMC (闪存模式控制)(是否让闪存接口控制从闪存传输到 DMA?)
W 0x36 0x08   0x 00 00 00 03

1/2.b:检查(并等待) DLCP 状态被清除
W 0x36 0x15 0x03  
R 0x37 //预期返回4个字节、如果 DLCP 准备就绪、则应接收0xXX、0xxx、BXXX010X0、0x8A

//2.c:通过闪存读取寄存器读取闪存、一次读取4个字节
W 0x36 0x15 0x07  
R 0x37             //预期起始序列位置的4个字节
W 0x36 0x15 0x07  
r 0x37             //预期增加4个字节
...
W 0x36 0x15 0x07  
R 0x37             //直到读取 RDATA_BYTE_QTY

在最后一个步骤2.c 中、我继续从寄存器0x07...读取相同的值

有什么想法我在做什么错?

非常感谢您的帮助!

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

    您好、用户:

    欢迎来到 E2E 论坛、感谢您对 DLPRegistered技术的兴趣。 我们希望帮助您解决您的问题。  

    您的启动界面图像可能包含许多相同的内容、我注意到您只读回256字节的数据、但一些启动界面图像非常大。 例如、我的一个启动界面图像超过了千字节、或者有些超过了千字节。

    如果您可以使用某种闪存编程器工具打开闪存映像、则可以通过查看内容来了解预期内容或与之进行比较。  

    例如、以下示例是固件选择器工具中 dlpc2607默认的闪存映像、启动界面开始时会显示一段时间内相同的数据。  

    此致、

    Alex Chan

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

    您好、感谢您的回答。

    我只读取256个字节、只是作为测试。

    我还没有在闪存中写入任何内容(我没有先写入无法读取的内容^^)、所以我应该会有默认的启动界面。 我从读取寄存器(0x07)返回的值始终为0x 00 10 00 C8 (不是0x FF FF FF FF...)

    实际上:无论我尝试在闪存中读取的起始地址是什么(0x 00 04 D0 00用于启动界面;或 0x 00 52 00用于热敏电阻 LUT;或其他任何地方)、以及我尝试读取的任何 RDATA_BYTE_QTY:我总是得到0x 00 10 00 C8...

    我还注意到其他"奇怪"行为。

    在读取序列、软件复位或完全重新启动之后:

    *起始地址(0x79)更新为值2 (默认值应为0...)

    * ADDR_BYTE_QTY (0x74)更新为值0 (当默认/复位/正常值为 3...时)

    * WDATA_BYTE_QTY (0x76)、我不使用、其值为1 (当默认/复位值实际为0时...)

    不确定它是否会帮助你,帮助我...

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

    您好、用户:

    感谢您提供更多信息。 请给团队一些时间来进一步调查此问题。

    另请注意、这是一个正在逐步淘汰的较旧 EVM 和芯片组、因此我们可能能够提供的支持可能有限。  

    此致、

    Alex Chan

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

    太好了、谢谢

    PS:DLP2000的"全新"EVM 是什么?

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

    您好、用户:

    我们鼓励客户使用具有较新芯片组的 DLPDLCR160CPEVM。

    https://www.ti.com/tool/DLPDLCR160CPEVM

    此致、

    Alex Chan

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

    我订购了 DLPDLCR160开发板、但它只能驱动 DLP160CP (而不能驱动 DLP2000)。 您确认吗?

    同时、您是否有关于通过 I2C 直接读取/写入 DLPDLCR2000闪存所需的伪代码的任何更新? 谢谢!

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

    您好、用户:

    您是指 DLPDLCR160CPEVM 吗? 但是的、DLP160芯片组与 DLP2000不同、不兼容。

    https://www.ti.com/tool/DLPDLCR160CPEVM

    很遗憾、我们将终止对  DLPDLCR2000的支持、因此无法进一步为您提供帮助。 由此给您带来的不便、我们深表歉意。

    此致、

    Alex Chan

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

    您好 Alex、感谢您的回答。

    是的、我之前的确在谈论 DLPDLCR160CPEVM。 因此、您确认此另一个开发板只能驱动 DLP160、而不能驱动 DLP2000。

    我是否了解 DLP2000现在也已停产;或者只是 DEV-board (DLPDLCR2000)已结束?

    如果 DLP2000未停产:您是否计划 使用新的开发板(我想说基于 MCU)来进行演示?

    提供一点背景信息 (注意我的最后一个问题^^):

    我们在光电子学实验中将 DMD 用作一个单色光控制器。 DLP160的镜片间距和倾斜度(5.4um 和17度)与 DLP2000 (7.5um 和12度)不同、我们不能在不必更改许多其他组件的情况下将其中一个替换为另一个。

    在这些实验中、我们仅极低的速度(每秒小于1个二进制图形)显示二进制图像(每个微镜/像素为1或0;无需 PWM 或 RGB LED 同步)。

    给定这些"简单规格":

    是否有(有文档记载的)方法可以在不使用开发板或 DLPC2607 IC 的情况下在引脚级直接驱动 DLP2000? 这意味着、我们将通过定制的"破孔"PCB (使用附加 hoc 电源和电平转换器)"只需"将 DLP2000连接至 MCU、从而控制微镜的倾斜度。

    非常感谢您的支持!

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

    您好、用户:

    是的、 DLPDLCR160CPEVM 与 DLPDLCR2000EVM 不同、不兼容、无法相互驱动。

    遗憾的是、我们将停止对整个 DLP2000 + DLPC2607芯片组的支持、并将客户迁移至 DLPDLCR160CPEVM。  

    对于您的进一步问题、我们不支持在没有 DLPC2607和 PMIC 芯片的情况下使用 DLP2000。 一般来说、对于所有 DLP 产品、我们只支持完整的芯片组使用 DMD + Controlloer +电源管理芯片。

    此致、

    Alex Chan

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

    Alex、  
    这一点很有用、因为我们也依靠 DLP2000和 DLPC2607。 我们在不知道支持已结束的情况下额外购买了两个 DLPDLCR2000EVM。  

    回应 Mejdi 的问题:您是否计划使用类似 DLPDLCR2000EVM 的新开发板?  

    此致、  

    Jonathan  

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

    Jonathan、您好!

    我们鼓励客户寻找 DLPDLCR160CPEVM 附带的新型芯片组。 遗憾的是、这款新芯片组与较旧的 DLPDLCR2000EVM 不兼容。

    https://www.ti.com/tool/DLPDLCR160CPEVM

    此致、

    Alex Chan