【问题标题】:Lattice ECP5 UART, no signal on terminal emulatorLattice ECP5 UART,终端仿真器上没有信号
【发布时间】:2022-01-11 20:49:10
【问题描述】:

我按照this 教程写了这封信,但我会详细解释我具体采取了哪些步骤。我有一块 ECP5 评估 85k 板。

  1. 我在 R34/R35 (RX/TX) 和 R21 上焊接了电桥(将 LED D1 连接到 RXD)
  2. 我使用我的 Windows 安装来运行最新版本的 FT_PROG。在 FT_PROG 中,我转到 FT_EEPROM -> 硬件特定 -> 端口 B -> 硬件并将其设置为 RS232 并点击程序。根据软件成功完成。
  3. 然后我将 USB 端口转发到我的虚拟盒 linux 机器。它可以识别电路板,我可以在其上成功运行 verilog 文件。
  4. 我运行 ./raw_serial.shraw_serial.v 上传到我的板上,该板应该重复打印 A 到串行监视器。
  5. 然后我在 /dev/ttyUSB1 上打开 minicom,它可以识别设备,波特率设置正确。
  6. 然后我尝试按如下方式使用 cu:sudo chmod 666 /dev/ttyUSB1 && sudo cu -l /dev/ttyUSB2 -s 115200。它会打开一个终端并说它已连接。

Led D1 亮起,两个终端程序都表明连接成功(当然我一次尝试了其中一个)。屏幕上没有打印任何内容。当我使用 minicom 并重新上传 raw_serial.v 时,屏幕上会打印一些 > 标志,仅此而已。我尝试打开和关闭回声,但似乎没有任何效果。

【问题讨论】:

    标签: fpga uart lattice


    【解决方案1】:

    以下内容对我有用,也可能对其他人有用。我假设您使用的是 openocd。

    1. 不要在 Windows 中使用 FT_PROG,它似乎并没有真正刷新 FTDI 芯片。但是,它可以让您读回应该闪存到芯片的十六进制转储。开箱后未更改的 EEPROM 的十六进制转储如下:

      00000000  01 08 03 04 10 60 00 07 C0 FA 08 00 11 11 9A 10  .....`..Àú....š.
      00000010  AA 3C E6 12 00 00 00 00 56 00 00 00 00 00 00 00  ª<æ.....V.......
      00000020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      00000030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      00000040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      00000050  00 00 00 00 00 00 02 03 00 00 00 00 00 00 00 00  ................
      00000060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      00000070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      00000080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      00000090  00 00 00 00 00 00 00 00 00 00 10 03 4C 00 61 00  ............L.a.
      000000A0  74 00 74 00 69 00 63 00 65 00 3C 03 4C 00 61 00  t.t.i.c.e.<.L.a.
      000000B0  74 00 74 00 69 00 63 00 65 00 20 00 45 00 43 00  t.t.i.c.e. .E.C.
      000000C0  50 00 35 00 20 00 45 00 76 00 61 00 6C 00 75 00  P.5. .E.v.a.l.u.
      000000D0  61 00 74 00 69 00 6F 00 6E 00 20 00 42 00 6F 00  a.t.i.o.n. .B.o.
      000000E0  61 00 72 00 64 00 12 03 46 00 54 00 32 00 55 00  a.r.d...F.T.2.U.
      000000F0  59 00 54 00 4A 00 56 00 00 00 00 00 00 00 FC 27  Y.T.J.V.......ü'
      

      我只是在这里发布以供将来参考,我们不会使用股票 eeprom。

    2. 我们需要将 eeprom 闪存到 RS232-HS 模式。为此,我们必须首先相应地更改 eeprom 的十六进制转储。要将通道 B 置于 RS232-HS 模式,我们需要将最后一行的最后一列从 ' 更改为 |。创建一个名为 eeprom_RS232.bin 的十六进制文件,其内容如下:

      00000000  01 08 03 04 10 60 00 07 C0 FA 08 00 11 11 9A 10  .....`..Àú....š.
      00000010  AA 3C E6 12 00 00 00 00 56 00 00 00 00 00 00 00  ª<æ.....V.......
      00000020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      00000030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      00000040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      00000050  00 00 00 00 00 00 02 03 00 00 00 00 00 00 00 00  ................
      00000060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      00000070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      00000080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      00000090  00 00 00 00 00 00 00 00 00 00 10 03 4C 00 61 00  ............L.a.
      000000A0  74 00 74 00 69 00 63 00 65 00 3C 03 4C 00 61 00  t.t.i.c.e.<.L.a.
      000000B0  74 00 74 00 69 00 63 00 65 00 20 00 45 00 43 00  t.t.i.c.e. .E.C.
      000000C0  50 00 35 00 20 00 45 00 76 00 61 00 6C 00 75 00  P.5. .E.v.a.l.u.
      000000D0  61 00 74 00 69 00 6F 00 6E 00 20 00 42 00 6F 00  a.t.i.o.n. .B.o.
      000000E0  61 00 72 00 64 00 12 03 46 00 54 00 32 00 55 00  a.r.d...F.T.2.U.
      000000F0  59 00 54 00 4A 00 56 00 00 00 00 00 00 00 FC 27  Y.T.J.V.......ü|
      

      现在,我们需要使用Anton's method 将此 eeprom 闪存到我们的 ECP5。为此,首先创建一个包含以下内容的文件 ftdi_RS232.conf

      vendor_id=0x403
      product_id=0x6010
      filename="eeprom_RS232.bin"
      flash_raw=true
      

      使用以下命令,我们可以闪存到我们的 ECP5:ftdi_eeprom --flash-eeprom ftdi_RS232.conf。如果我们想要恢复到库存 eeprom,我们可以使用步骤 1 中给出的十六进制转储轻松重复此方法。

    3. 现在是时候刷新 verilog 文件了。然而,ECP5 的器件描述已从 Lattice ECP5 评估板 更改为 Dual RS232-HS。我们需要告诉 openocd 去寻找那个特定的设备。首先创建一个包含以下内容的文件 ecp5.cfg

      # this supports ECP5 Evaluation Board
      
      interface ftdi
      ftdi_device_desc "Dual RS232-HS"
      ftdi_vid_pid 0x0403 0x6010
      # channel 1 does not have any functionality
      ftdi_channel 0
      # just TCK TDI TDO TMS, no reset
      ftdi_layout_init 0xfff8 0xfffb
      reset_config none
      
      # default speed
      adapter_khz 5000
      
      # ECP5 device - LFE5UM5G-85F
      jtag newtap ecp5 tap -irlen 8 -expected-id 0x81113043
      

      然后,像往常一样创建您的 svf 文件,并使用以下命令将其刷新:

      sudo --preserve-env=PATH env openocd -f ./ecp5.cfg -c "transport select jtag; init; svf raw_serial.svf; exit"
      
    4. 最后,我们可以打开一个终端来读取 ECP5 的串行输出。个人比较喜欢用minicom:sudo chmod 666 /dev/ttyUSB0 &amp;&amp; minicom -D /dev/ttyUSB0

    5. raw_serial.v 示例的另一个问题是它没有使用自述文件建议的 115200 波特率,而是使用 19200。连接到 FTDI 芯片的时钟以 12 MHz 运行。如果您想要 115200 的波特率,您需要每 12,000,000 / 115,200 ~= 104 滴答发送一个位。这意味着您需要将第 14 行更改为 if (counter == 104) begin

    【讨论】:

    • USB 设备有时会从 ttyUSB1 更改为 ttyUSB0 并返回,因此请注意
    猜你喜欢
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多