Lattice ECP5 UART,终端仿真器上没有信号

Lattice ECP5 UART, no signal on terminal emulator

我严格按照 this 教程进行操作,但我会详细解释我具体执行了哪些步骤。我有一个 ECP5 评估 85k 板。

  1. 我在 R34/R35(RX/TX)和 R21(将 LED D1 连接到 RXD)上焊接了桥
  2. 我使用 windows 安装到 运行 最新版本的 FT_PROG。在 FT_PROG 我去了 FT_EEPROM -> Hardware Specific -> Port B -> Hardware 并将其设置为 RS232 并点击程序。根据软件成功完成。
  3. 然后我将 USB 端口转发到我的虚拟盒子 linux 机器上。它能识别电路板,我可以在上面成功 运行 verilog 文件。
  4. 我运行./raw_serial.sh上传raw_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 时,一些 标志会打印到屏幕上,仅此而已。我尝试打开和关闭回声,但似乎没有任何效果。

以下内容对我有用,也可能对其他人有用。我假设您正在使用 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.......ü'
    

    我只是 post 在这里供将来参考,我们不会使用库存 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 Evaluation Board 更改为 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 && minicom -D /dev/ttyUSB0.

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