AnsweredAssumed Answered

Making ECSPI1_* 1.8V on imx6sololite 3.0.35

Question asked by jayakumar2 on Mar 5, 2016
Latest reply on Mar 10, 2016 by alejandrolozano

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


Reading 0x1 count starting at address 0x020E0060


0x020E0060:  00000005


root@imx6slevk:/mnt/mmc# /unit_tests/memtool -32 0x209C004 1


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


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.