3.3-to-5 level converter on inputs keeps levels always high

Trying to interface my old Sharp PC-1403, with its 11-pin connector, with an ST Nucleo L053R8 board, with the aim of emulating an external disk drive. The board is a 3.3v but the Sharp PC is a 5v CMOS device, so I thought about introducing a bi-directional level converter in between, using one of this type: https://www.sparkfun.com/products/12009 (actually, one of the many clones).

image

Infact, the Nucleo board is 5v-input tolerant, but looks like its 3.3v output isn’t enough to drive the 5v input on the Sharp-PC.

After initially struggling to get the Sharp-PC properly communicate with the board, I found out that the level converter kept a high value on inputs, in spite of pull-down resistors, or pulling input down by software, e.g.:

    // input ports
    DigitalIn   in_BUSY   (D4);    
    InterruptIn irq_BUSY  (D4);    
    DigitalIn   in_D_OUT  (D5);    
    InterruptIn irq_DOUT  (D5);
    DigitalIn   in_X_OUT  (D7);     
    InterruptIn irq_X_OUT (D7);
    DigitalOut        out_ACK   (D9);
...
    in_BUSY.mode(PullDown);
    in_D_OUT.mode(PullDown);
    in_X_OUT.mode(PullDown);

So, I left the level converted only on the ACK line, which is an output from board to Sharp-PC, removing it from the BUSY, DOUT and XOUT input lines, as per this schematics:

My issue now is that this configuration is fine for the initial handshake only, which is working, but for exchanging actual data, lines are expected to be bi-directional, so the level converter would be required on data lines too.

Any alternatives? Should I use different board pins for inputs and outputs and “merge” them externally? I hope there’s a simpler approach!

Btw - my code is at GitHub - ffxx68/Sharp_ce140f_emul