imx6 NAND chip selects

Hugo Villeneuve hugo at hugovil.com
Mon May 12 13:32:36 PDT 2014


On 05/08/2014 11:37 AM, Huang Shijie wrote:
> On Wed, May 07, 2014 at 12:31:42PM -0400, Hugo Villeneuve wrote:
>> Hi,
>> I am trying to connect a NAND flash device (Micron MT29F8G08) to a
>> Wandboard Dual.
>>
>> Here is the pin mapping:
>>
>> i.MX6             NAND flash
>> ----------------------------
>> NANDF_CS0    -->  CE#
>> NANDF_RB0    -->  R/B#
>> NANDF_WP_B   -->  WP#
>> NANDF_CLE    -->  CLE
>> NANDF_ALE    -->  ALE
>> NANDF_WE     -->  WE#
>> NANDF_RE     -->  RE#
>> NANDF_D[0-7] -->  I/O[0-7]
>>
>> This NAND flash has a single chip-select.
>>
>> I'm testing it using Linux kernel 3.15.0-rc3.
>>
>> In the wandboard device tree file, I have added all the above gpmi
>> pins as GPMI pins.
>>
>> I am still booting from the SD card, so at this point I am only
>> trying to detect the NAND device. Unfortunately, when the kernel
>> boots, the GPMI driver fails to register (error -19).
>>
>> If I monitor the NANDF_CS0 line, I can see that it is pulsed low,
>> but I am not seing any activity on the NANDF_WE line.
>>
>> However, If I monitor the NANDF_CS1 line, I can see that it is
>> pulsed low, and during the time it is low the NANDF_WE line is also
>> going low.
>>
>> I then made sure to reconfigure the unused pins NANDF_CS[1-3] as
>> GPIOs (ALT5 function) in my device tree file. I have confirmed with
>> kernel debug traces that the iomux register for NANDF_CS1 have the
>> value 0x05, which means ALT5 function (GPIO). But I am still seeing
>> the same behavior as before on the oscilloscope.
>>
>> So how can I configure the GPMI driver to only use NANDF_CS0 and not
>> NANDF_CS1?
>>
>> And is it normal that NANDF_CS1 is still used by the GPMI driver
>> when configured as GPIO?
> It is not normal at all.
>
> Please disable the GPIO pinctrl, and only enable the pinctrl for gpmi
> and try again.
>
> I am sure that you did not configure the PADs correctly.
>
> thanks
> Huang Shijie

Hi Huang,
knowing that it was not normal to have NANDF_CS1 toggling made me think 
to look more closely at the hardware level, and I found that the 8 data 
lines are unfortunately inverted on our PCB.

I have temporarily patched the Linux GPMI driver to invert LSB and MSBs 
for read and writes, and voilà, now my NAND flash is correctly detected!

Sorry for the noise.

Hugo.






More information about the linux-mtd mailing list