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.

[参考译文] LP55231:无法读取和写入 LP55231的 SRAM 的程序存储器

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1379181/lp55231-not-able-to-read-and-write-the-program-memory-of-sram-of-lp55231

器件型号:LP55231
Thread 中讨论的其他器件: LP5813

工具与软件:

我已通过 i2c 将 RaspberryPi 3 B+与 LP55231结合使用、能够通过写入寄存器来预览连接到 D7和 D9的 LED、使用 python 并连接 python 代码。

我们的目标是点亮 D7和 D9的启动状态。

导入 smbus2
导入时间
导入 RPi。 GPIO 作为 GPIO

# I2C 总线(1为 Raspberry Pi 3)
总线= smbus2.smbus (1)
# LP55231 I2C 地址
地址= 0x32
#用于使能的 GPIO 引脚(BCM 编号)
ENABLE_PIN = 17

DEF setup_GPIO():
  """"设置 GPIO 引脚以启用并将其设置为高电平以启用 LP55231。""
  GPIO.setmode(GPIO.BCM)
  GPIO.setup(ENABLE_PIN、GPIO。 输出)
  GPIO.OUTPUT (ENABLE_PIN、GPIO。 High) #启用 LP55231

DEF READ_REGISTER (REGISTER):
  ""通过 I2C 从指定寄存器读取一个字节。""
  value = BUS.READ_BYTE_DATA (地址、寄存器)
  从 reg{register:#04x}打印(f"读取值{value:#04x}")
  返回值

DEF WRITE_REGISTER (寄存器、值):
  ""通过 I2C 将一个字节写入指定的寄存器。""
  BUS.WRITE_BYTE_DATA (地址、寄存器、值)
#  print (f"写入值{value:#04x}到注册{register:#04x}")
  READ_REGISTER (REGISTER)

DEF init_lp55231 ():
  ""初始化 LP55231 LED 驱动器。""
  #重置设备
  WRITE_REGISTER (0x00、0x40)
  WRITE_REGISTER (0x01、0x15)
#  write_register (0x05、0x40)

  time.sleep (0.1)

  #启用所有引擎并设置内部时钟和开机状态
  WRITE_REGISTER (0x36、0x0F) #引擎1控制
# write_register (0x37、0x0F) # Engine 2 control
# write_register (0x38、0x0F) # Engine 3 control

  #设置 LED 电流(假设你想要全电流,必要时调整)
  WRITE_REGISTER (0x26、0x32) #红色 LED 电流(最大50%)
  WRITE_REGISTER (0x27、0x32) #绿色 LED 电流(最大50%)
  WRITE_REGISTER (0x28、0x32) #蓝色 LED 电流(最大50%)

  #启用所有 LED 的输出控制
  WRITE_REGISTER (0x16、0xFF)
  WRITE_REGISTER (0x17、0xFF)
  WRITE_REGISTER (0x18、0xFF)
  WRITE_REGISTER (0x71、0x40)
  WRITE_REGISTER (0x2C、0xB7)
  WRITE_REGISTER (0x0C、0x80)

  #将程序加载到 SRAM 中
  enable_auto_boot()
  LOAD_PROGRAM_TO_SRAM()
  

  #配置在引导时运行程序
  #设置自动增量以保持写入指令
  WRITE_REGISTER (0x3D、0x01)
  READ_REGISTER (0x3A)
  #延迟以确保 LP55231开始执行程序
  时间睡眠(0.5)

DEF LOAD_PROGRAM_TO_SRAM():
  ""将程序加载到 SRAM 中以设置上电时的绿色 LED。""
  #将绿色 LED 设置为最大亮度的示例程序
  程序=[
    0x9D、0x03、 # ldi R6100 (最大亮度)
    0x40、0x96、    # MOV R6、PWM1 (将值移至绿色 PWM 寄存器)
    0xC0、0x00、    # MOV R6、PWM1 (将值移至绿色 PWM 寄存器)
    0x01、0x00、    # NOP (无操作、程序结束)
  ]
  SRAM_ADDRESS = 0x50 #程序存储器从0x50开始

  #将程序写入 SRAM
  对于 i、枚举(program)中的指令:
    WRITE_REGISTER (SRAM_ADDRESS + I、指令)
#    READ_REGISTER (SRAM_ADDRESS + I)

DEF ENABLE_AUTO_BOOT():
  ""在上电时启用 LP55231从 SRAM 执行程序。""
  #设置引擎1在引导时从 SRAM 执行程序
  WRITE_REGISTER (0x4C、0x50) #将程序计数器设置为 SRAM 的起始值
  WRITE_REGISTER (0x37、0x00) #引擎2控制
#  write_register (0x00、0x60) #启动引擎1.

默认 main():
  尝试:
    Setup_GPIO()
    init_lp55231 ()
    READ_REGISTER (0x50)
    #保持循环或休眠以保持程序运行
#    正确时:
 #      时间睡眠(1)

  最后:
    #清理 GPIO
    gpio.cleanup ()

如果__name__="__MAIN__":
  main ()


-------------------------------------------------------- 程序结束

从寄存器0x00读取值0x40
从寄存器0x01读取值0x15
从寄存器0x36读取值0x0F
从寄存器0x26读取值0x32
从寄存器0x27读取值0x32
从寄存器0x28读取值0x32
从寄存器0x16读取值0xff
从寄存器0x17读取值0xff
从寄存器0x18读取值0xff
从寄存器0x71读取值0x00
从寄存器0x2C 读取值0xb7
从寄存器0x0c 读取值0x80
从寄存器0x4c 读取值0x50
从寄存器0x37读取值0x00
从寄存器0x50读取值0x00
从寄存器0x51读取值0x00
从寄存器0x52读取值0x00
从寄存器0x53读取值0x00
从寄存器0x54读取值0x00
从寄存器0x55读取值0x00
从寄存器0x56读取值0x00
从寄存器0x57读取值0x00
从寄存器0x3D 读取值0x00
从寄存器0x3a 中读取值0x50
从寄存器0x50读取值0x00


-------------------------------------------------------- 代码的实际日志。

因为我可以看到从0x50开始的程序存储器地址不能写入数据

有没有我在这里遗漏的任何顺序,任何建议请提供相同的


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

    尊敬的 Varu:

    请给我一些时间,因为我今天太不好了,我会稍后回复你。

    BR、Jared

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

    尊敬的 Jared Zhou:

    您能在这里提供帮助吗?

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

    尊敬的 Varu:

    很抱歉这么晚才回复。

    我的理解是、您需要使用 LP55231中的内部动画、但当您在 LP55231中对 SRAM 进行编程时、它不起作用。 我是对吗?

    请参阅以下对 SRAM 进行编程的主要步骤:

    1.设置 chip_en 以启用器件。 将40h 写入寄存器00h

    2.将引擎配置为"Load program to SRAM"模式 将15h 写入寄存器01h

    3.然后、您仍然可以配置 DC、PWM 和其他设置。

    4.对 SRAM 进行编程

    5.在 LP55231完成 SRAM 后、请将操作模式配置为"Run program"(运行程序)。 将2Ah 写入寄存器01h

    6.为引擎将程序执行模式配置为"保持"至"运行"。 将6A 写入寄存器00h

    BTW、我认为 SRAM 中的数据无法读回、因为我也无法读回。

    最后一个问题、您能告诉我为什么选择 LP55231作为 LED 驱动器吗? 我问这个问题的原因是、我们的下一代 LP55231、 LP5813 具有更好的性能、供应和支持、尤其是内部动画。 LP5813要远远好于 LP55231。

    BR、Jared