Hi imx friends,
I'm trying to interface a 1.8V spi flash to a 6sololite board. Normally, our output pins are 3.3V so we want to convert just the spi pins to 1.8V. It is just 4 pins ECSPI1_SS0/MOSI/MISO/SCLK. The first thing I'm trying to figure out is whether this is just a software task or if it requires some hardware change in the way the rails are provided.
I did an experiment to see if I could convert a regular GPIO pin (AUD_TXD / pad J22 GPIO1_IO05) to a 1.8V output.
root@imx6slevk:/mnt/mmc# /unit_tests/memtool -32 0x20E0060 1
E
Reading 0x1 count starting at address 0x020E0060
0x020E0060: 00000005
root@imx6slevk:/mnt/mmc# /unit_tests/memtool -32 0x209C004 1
E
Reading 0x1 count starting at address 0x0209C004
0x0209C004: 8F807F90
Set pin direction to output.
root@imx6slevk:/mnt/mmc# /unit_tests/memtool -32 0x209C004=0x8F807FB0 1
Writing 32-bit value 0x8F807FB0 to address 0x0209C004
- set gpio hi
root@imx6slevk:/mnt/mmc# /unit_tests/memtool -32 0x209C000=0x20 1
Writing 32-bit value 0x20 to address 0x0209C000
I then measured voltage of that pin which is connected to a connector pin and it reads 3.1V.
- turn gpio off
root@imx6slevk:/mnt/mmc# /unit_tests/memtool -32 0x209C000=0x00 1
- now convert PAD from LVE=0 (hi voltage) to low voltage
root@imx6slevk:/mnt/mmc# /unit_tests/memtool -32 0x20E02B8 1
E
Reading 0x1 count starting at address 0x020E02B8
0x020E02B8: 000110B0
root@imx6slevk:/mnt/mmc# /unit_tests/memtool -32 0x20E02B8=0x004110B0 1
Writing 32-bit value 0x4110B0 to address 0x020E02B8
- set gpio on
root@imx6slevk:/mnt/mmc# /unit_tests/memtool -32 0x209C000=0x20 1
Writing 32-bit value 0x20 to address 0x0209C000
But I still measure 3.1V on the output so setting LVE on its own after normal bootup does not seem to affect the output voltage of the gpio.
I also changed the pad setting in both the kernel and u-boot to set PAD_CTL_LVE immediately during bootup to see if that makes it work. It doesn't, it still reads 3.1V.
Reading the hardware debug manual, IMX6SLHDG.pdf:
It says in section 7.2:
Step1 – Follow the proper power-up sequence up to NVCC33_IO rail
power-up point. Step2 – Power up NVCC33_IO to 1.8V, instead of
3Vnominal. Step3 – Complete the rest of the power-up sequence. Step4 –
Set up each of the dual voltage pad’s operating voltage to NVCC18_IO
by setting LVE bit located in corresponding IOMUX control register.
Step5 – Change bump NVCC33_IO’s voltage to nominal 3V. Above step will
require additional steps, but will avoid possible electrical issues to
1.8V logic level lines or having to add external glue logic which
could be cost prohibitive. CAUTION When ramping NVCC33_IO to 1.8V,
make sure to have NVCC33_IO is powered up before NVCC18_IO. Also,
NVCC33_IO must be ramped up after VDD_HIGH_IN is powered up. If these
sequences were not followed, it may result in unreliable boot or
possibly cause IC failure.
It is unclear to me if above is saying we have to change the rail
power-up to enable 1.8V output or if this is only a requirement if
many gpio pins need to be 1.8V.
I was wondering if anyone could tell me whether we can change a gpio (and
eventually the spi pins ECSPI1_SS0/SCLK/MISO/MOSI) to 1.8V dynamically
using LVE or if there's some hardware constraints about how LVE is used.
Thanks!
Hi,
You may need to change the rail voltage depending on the pad you are using.
Please refer to the next discussion
I hope that helps.
Alejandro