Hi Yi Ping,
Section 5.2 of this appnote refers to hardware recommendations, and I followed these recommendations during board development. I actually use 4.7k pullups on the CS lines.
I don't believe this is a hardware issue, but rather a software issue; specifically an issue within u-boot software and the IFC setup.
I based the setup off of the software provided by LSDK 21.08.
As a background on the board, the NAND flash is 4GB; 2GB per chip select.
I am able to control the CS lines independently when I use the following code
void TestNANDchipselect( void ) {
struct mtd_info *mtd = get_nand_dev_by_index(0);
struct nand_chip *nand = mtd_to_nand(mtd);
uint8_t buffer[4096];
while( 1 ) {
nand_read_page_op(nand, 0x7FF80000>>12, 0, buffer, 1024);
nand_read_page_op(nand, 0x7FF80000>>12, 0, buffer, 1024);
nand_read_page_op(nand, 0x80000000>>12, 0, buffer, 1024);
}
}
I get the following scope traces:
NAND CS1&2
The problem is from within u-boot. When I execute `nand erase.chip`, the terminal output indicates it erases all addresses from 0x00000000-0xFFFFFFFF, but the scope indicates it never uses the CS1 line... this is confusing.
Can you think of a reason why this might happen?
I can provide you with the constant definitions I use within my board header file if that would help.
-Dave