imx6 NAND chip selects
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?
Hugo.
Quoted 41 lines · Hugo Villeneuve
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_CS0line, I can see that it is pulsed low, but I am not seing any activity on theNANDF_WEline.However, If I monitor the
NANDF_CS1line, I can see that it is pulsed low, and during the time it is low theNANDF_WEline 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_CS1have the value0x05, which means ALT5 function (GPIO). But I am still seeing the same behavior as before on the oscilloscope.
Quoted 5 lines
So how can I configure the GPMI driver to only use
NANDF_CS0and notNANDF_CS1?And is it normal that
NANDF_CS1is 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
Quoted 49 lines · Huang Shijie
Quoted 41 lines · Hugo Villeneuve
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_CS0line, I can see that it is pulsed low, but I am not seing any activity on theNANDF_WEline.However, If I monitor the
NANDF_CS1line, I can see that it is pulsed low, and during the time it is low theNANDF_WEline 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_CS1have the value0x05, which means ALT5 function (GPIO). But I am still seeing the same behavior as before on the oscilloscope.Quoted 5 lines
So how can I configure the GPMI driver to only use
NANDF_CS0and notNANDF_CS1?And is it normal that
NANDF_CS1is still used by the GPMI driver when configured as GPIO?It is not normal at all.
Quoted 7 lines
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.
Quoted 49 lines · Huang Shijie
Quoted 41 lines · Hugo Villeneuve
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_CS0line, I can see that it is pulsed low, but I am not seing any activity on theNANDF_WEline.However, If I monitor the
NANDF_CS1line, I can see that it is pulsed low, and during the time it is low theNANDF_WEline 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_CS1have the value0x05, which means ALT5 function (GPIO). But I am still seeing the same behavior as before on the oscilloscope.Quoted 5 lines
So how can I configure the GPMI driver to only use
NANDF_CS0and notNANDF_CS1?And is it normal that
NANDF_CS1is still used by the GPMI driver when configured as GPIO?It is not normal at all.
Quoted 7 lines
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.