GLENDALE, Ariz. -- The NFC championship banner was freshly hanging from the stadium rafters. The offense that helped Arizona win it was rarely on display.
San Francisco's, on the other hand, showed up just enough.
The 49ers went three-and-out on five of their six second-half possessions on Sunday, but Shaun Hill directed a masterful 15-play, 80-yard drive on the other. His 3-yard touchdown pass to Frank Gore with 7:26 to play was the difference in the 49ers' 20-16 victory over the Cardinals.
"It wasn't anything necessarily that I said," Hill said. "The whole unit was saying the same thing: 'Hey, it's time to go.'"
The Cardinals looked a lot like the team that went 0-4 in the preseason and not much, at least on offense, like the one that won three playoff games before a near-miss against Pittsburgh in the Super Bowl just a few months ago.
"We're just not meshing," said Kurt Warner, who threw two interceptions and faced a fierce pass rush much of the afternoon. "We never seem to get into a rhythm. There always seems to be something to stop us."
The 49ers, who endured a brutal training camp under coach Mike Singletary, gave the coach a victory in his first opener after taking over for the fired Mike Nolan seven games into last season. It was Arizona's first loss to an NFC foe in two seasons.
"To come in their backyard, after everything they've accomplished, we knew it was going to be a tremendous challenge," Singletary said.
For the seventh time in the last eight meetings between the teams, the final margin was seven points or less.
Arizona rallied from 10 points down to go up 16-13 on Neil Rackers' 44-yard field goal with 14:52 to play, but the 49ers regained control with a drive that used up nearly half of the final quarter.
"We're definitely too good to be having these kind of performances," the Cardinals' Larry Fitzgerald said.
The Cardinals held Gore to 30 yards in 22 carries and sacked Hill four times, but Arizona committed 12 penalties for 82 yards and had its pass protection break down at crucial times.
"The one thing I want to say for us is that you can't have penalties, you can't have mistakes and expect to win," Cardinals coach Ken Whisenhunt said.
After the 49ers had to punt from their 1 late in the game, the Cardinals had first down at the San Francisco 39.
But a false-start penalty and a holding call pushed Arizona back 15 yards and the threat ended when Warner was leveled by Justin Smith as he threw on fourth-and-5 at the San Francisco 33 with 1:51 to play.
"I'm really most upset by getting the ball back in the fourth quarter in the plus territory and going back 15 yards," Whisenhunt said. "That's horrible. That's unacceptable, and it's what causes you to lose football games. I said to the team afterward, guys that make penalties are not going to play."
Arizona had it once more, this time at the 46 at the finish, but another fierce rush by Smith forced Warner's fumble as the game ended.
Hill completed 18 of 31 passes for 209 yards and one touchdown and wasn't intercepted. Warner was 26 of 44 for 288 yards and one touchdown with two interceptions.
Arizona's Tim Hightower caught 12 passes for 121 yards, the second-most receptions by a running back in Cardinals history. Fitzgerald, who didn't make a catch until the final seconds of the first half, had six for 71 yards. Anquan Boldin, playing despite a sore hamstring, caught one for five yards.
Arizona was without its No. 3 receiver Steve Breaston because of a sprained kneecap.
The 49ers went three-and-out on five of their six possessions in the second half.
But one drive was a doozy.
"We just moved the chains," Hill said. "I don't believe we got any big plays on it, just executing and moving the change."
After the Cardinals had scored 13 points in a row to take the lead, Hill drove the team downfield, converting four third-down opportunities in the process, two on passes to the venerable Isaac Bruce, who had a 50-yard catch in the first half.
On third-and-goal at the 3, the 49ers sent Gore out on the flat and no one followed him. He caught the short pass and scored with no one near him.
"We made a play here, a play there, and we won," Gore said.
The record for catches by a Cardinals running back is 13 by Larry Centers against St. Louis in 1996. ... The two teams opened the season against each other for the fourth straight time. ... San Francisco's Joe Nedney kicked a 50-yard field goal, making him 14 of 30 from 50 or longer in his career.
When the Denver Broncos matched the $18 million offer sheet running back C.J. Anderson received from the Miami Dolphins, they said they wanted him to take the next step. And as OTAs begin, Anderson says he ready for that too.
GREEN BAY, Wis. -- Photos seem to do funny things to Green Bay Packers running back Eddie Lacy. Remember his rookie training camp, when an unflattering picture made him look larger than he did in real life?
ESPN Packers reporter Rob Demovsky reviews Eddie Lacy's first day at OTAs where he showed off a slimmer physique, but still has a lot of work to do.
While Jordy Nelson wishes he was able to go all out during this week's OTAs, he's staying focused on the start of camp and the regular season.
Roger Goodell said he discussed a controversial North Carolina bill with Charlotte's mayor on Tuesday and supports the city's fight against it.
Raiders owner Mark Davis acknowledges there's work to be done in determining if Las Vegas, a city without a professional team, could support the NFL.